有人知道如何在服务启动时将我在serviceinstall中声明的参数传递给服务吗?它们在我的onstart中似乎总是空的(string[]args)。
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="MyService"
DisplayName="MyService"
Description="MyService Desc"
Start="auto"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="yes"
Arguments="MY ARGS HERE"
>
</ServiceInstall>
<ServiceControl Id="ServiceControl" Start="install" Stop="both" Remove="uninstall" Name="MyService" Wait="yes" />
最佳答案
有点老了,但你能做的是
<ServiceInstall
Id="SomeService"
Type="ownProcess"
Vital="yes"
Name="Some Service"
DisplayName="Some Service"
Description="Monitoring and management of some service"
Start="auto"
Account="LocalSystem"
ErrorControl="normal"
Interactive="no"/>
<ServiceControl Id="StartSomeService" Start="install" Stop="both" Remove="uninstall" Name="Some Service" Wait="yes">
<ServiceArgument>[P_USEREMAIL]</ServiceArgument>
<ServiceArgument>[P_USERPASSWORD]</ServiceArgument>
<ServiceArgument>[P_DEFAULTNAMINGCONTEXT]</ServiceArgument>
<ServiceArgument>[P_USEHTTPPROXY]</ServiceArgument>
<ServiceArgument>[P_PROXYADDRESS]</ServiceArgument>
<ServiceArgument>[P_PROXYDOMAIN]</ServiceArgument>
<ServiceArgument>[P_PROXYUSERNAME]</ServiceArgument>
<ServiceArgument>[P_PROXYPASSWORD]</ServiceArgument>
</ServiceControl>
更新:wix文档在涉及this元素时,很不幸是不重要的。
基本上,您可以设置(public)wix变量,通常定义为[p_*]参数(例如msiexec参数、static变量或ca变量)。这些值在启动时传递给服务,其方式与从服务控制台(或我想象的使用net start)启动服务时将这些值连接到作为启动参数提供的字符串中的方式相同。在我的例子中,这些是用空格分隔的值,例如,[p_usermail]是“-useremail some@email.com”,尽管这是任意的,因为您将在发布的服务启动代码中处理这个问题。
正如您可能知道的,这些值不会被持久化。如果服务未能使用您提供的值进行初始化,则需要重新安装/修复或以其他方式(即服务控制台、net start)将它们传递给服务。