gpt4 book ai didi

windows-services - 使用 SC.exe 创建带参数的服务

转载 作者:行者123 更新时间:2023-12-04 12:50:54 43 4
gpt4 key购买 nike

在过去的 2 个小时里,我尝试了各种可能的方法来使用 sc.exe 创建服务并传递参数,但我似乎无法做到这一点。

我已阅读 this SO question和所有的答案大约 5 次,它没有帮助!

从我在那里读到的内容看来,我应该像这样构造命令:

sc create MyService binPath= "C:\path\to\myservice.exe --param1=TestString"

我的服务 OnStart方法如下所示:
Protected Overrides Sub OnStart(ByVal args() As String)
If Not IsNothing(args) Then
Library.WriteLog("Number of args = " & args.Count)
If args.Count > 0 Then
For i = 0 To args.Count - 1
Library.WriteLog("Arg" & i & ": " & args(i))
Next
End If
End If
End Sub

但是我尝试过的所有内容都会在日志中产生“参数数量 = 0”

为清楚起见,我尝试了以下操作(可能还有一些):
sc create MyService binPath= "C:\path\to\myservice.exe --param1=TestString"
sc create MyService binPath= "C:\path\to\myservice.exe --TestString"
sc create MyService binPath= "C:\path\to\myservice.exe --param1=\"TestString\""
sc create MyService binPath= "C:\path\to\myservice.exe -param1=TestString"
sc create MyService binPath= "C:\path\to\myservice.exe -TestString"
sc create MyService binPath= "C:\path\to\myservice.exe -param1=\"TestString\""

我一定在这里错过了一些非常愚蠢的东西,但我正用它撞墙!

最佳答案

根据 this answer and the comments , args OnStart 的参数仅在windows服务对话框中手动设置启动参数时使用,不能保存。

您可以通过在 Main 中访问它们来使用您设置的参数。方法(默认位于 Service.Designer.vb 文件中)。下面是一个例子:

<MTAThread()> _
<System.Diagnostics.DebuggerNonUserCode()> _
Shared Sub Main(ByVal args As String())
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1(args)}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End Sub

您需要向服务类添加或修改构造函数以接受参数:
Private ReadOnly _arguments As String()

Public Sub New(ByVal args As String())
InitializeComponent()
_arguments = args
End Sub

那么你的 OnStart方法变为:
Protected Overrides Sub OnStart(ByVal args() As String)
If Not IsNothing(args) Then
Library.WriteLog("Number of args = " & _arguments.Count)
If args.Count > 0 Then
For i = 0 To args.Count - 1
Library.WriteLog("Arg" & i & ": " & _arguments(i))
Next
End If
End If
End Sub

关于windows-services - 使用 SC.exe 创建带参数的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045201/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com