C# Wix ServiceInstall参数
有人知道如何在服务启动时将我在ServiceInstall中声明的参数传递给服务吗?在我的OnStart(字符串[]args)中,它们似乎总是为nullC# Wix ServiceInstall参数,c#,wix,C#,Wix,有人知道如何在服务启动时将我在ServiceInstall中声明的参数传递给服务吗?在我的OnStart(字符串[]args)中,它们似乎总是为null 有人在这方面取得了进展吗?我看不到这些参数在启动时影响我的服务: <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Name="Servi
有人在这方面取得了进展吗?我看不到这些参数在启动时影响我的服务:
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="Service"
DisplayName="Service"
Description="a service"
Arguments="-p stuff"
Start="auto"
Account="LocalSystem"
ErrorControl="normal"
Interactive="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>
[P_USEREMAIL]
[P_用户密码]
[P_DEFAULTNAMINGCONTEXT]
[P_USEHTTPPROXY]
[P_代理地址]
[P_PROXYDOMAIN]
[P_PROXYUSERNAME]
[P_代理密码]
更新:WIX文档在元素方面令人遗憾地没有任何意义
基本上,您可以设置(公共)WIX变量,通常定义为[p_*](例如msiexec参数、静态变量或CA中的变量)。这些值在启动时以相同的方式传递给服务,就像从服务控制台(或我想象的使用net start)启动服务时,将这些值连接到作为启动参数提供的字符串中一样。在我的例子中,这些是以空格分隔的值,例如,[P_USERMAIL]是“-useremail”some@email.com,尽管这是任意的,因为您将在发布的服务启动代码中处理它
您可能知道,这些值不会持久化。如果服务无法使用您提供的值初始化,则需要重新安装/修复或以另一种方式(即服务控制台、网络启动)将其传递给服务。此处未找到答案,因此我解决了相同的问题: 有: 1) 当您使用
元素时,您的参数将被添加到服务的“可执行文件的路径”(“注册表中的ImagePath”)
使用方法获取参数(请注意,该方法返回的第一个参数是服务名称)
请记住将参数保存到配置文件或注册表中,并在安装之前读取它们因为如果运行修复/更改安装函数,这些参数将消失
2) 启动参数(一次性参数)
这些参数是运行OnScript(String)[Asgs]方法时可用的参数。
你应该考虑使用一个变量。YEP。我可以做到。我只是想看看为什么争论不起作用。但它们在哪里不起作用呢?安装程序是否未正确处理这些问题?如前所述,听起来你不希望安装程序作为应用程序配置来运行。在我的服务启动时,这些参数似乎永远不会影响它。除非(我可能)误解了文档。这些参数应该在服务从安装程序启动时激发到服务中。你已经阅读了吗?你能解释一下你发布了什么吗?这里也一样。你找到解决办法了吗,伙计(在main()中,启动时传递给exe的参数与服务启动时传递的参数之间存在区别。这可能会让您感到困惑。main()获取argc和argv,而servicebase.cpp在启动时通过以下方式获取自己的参数:virtual void OnStart(DWORD dwArgc,LPWSTR*pszArgv); partial class PrintMonitorService : ServiceBase
{
private readonly PrintMonitorServiceManager _serviceManager;
public PrintMonitorService()
{
InitializeComponent();
_serviceManager = new PrintMonitorServiceManager();
}
protected override void OnStart(string[] args)
{
_serviceManager.StartHosting(args);
}
protected override void OnStop()
{
_serviceManager.StopHosting();
}
<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>