Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wix ServiceInstall参数_C#_Wix - Fatal编程技术网

C# Wix ServiceInstall参数

C# Wix ServiceInstall参数,c#,wix,C#,Wix,有人知道如何在服务启动时将我在ServiceInstall中声明的参数传递给服务吗?在我的OnStart(字符串[]args)中,它们似乎总是为null 有人在这方面取得了进展吗?我看不到这些参数在启动时影响我的服务: <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Name="Servi

有人知道如何在服务启动时将我在ServiceInstall中声明的参数传递给服务吗?在我的OnStart(字符串[]args)中,它们似乎总是为null


有人在这方面取得了进展吗?我看不到这些参数在启动时影响我的服务:

          <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>