首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wix ServiceInstall参数

Wix ServiceInstall参数
EN

Stack Overflow用户
提问于 2012-05-16 22:49:23
回答 3查看 5.5K关注 0票数 4

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

代码语言:javascript
复制
<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" />
EN

回答 3

Stack Overflow用户

发布于 2014-04-22 06:16:46

有点老了,但这是你能做的

代码语言:javascript
复制
          <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>

更新:当涉及到this元素时,WIX文档令人悲哀。

基本上,您可以设置(公共) WIX变量,通常定义为P_* (例如,msiexec参数、静态或在CA中)。这些值在启动时传递给服务的方式与您在从服务控制台(或我想象中使用net start )启动服务时提供的作为启动参数的字符串中连接这些值的方式相同。在我的例子中,这些是空格分隔的值,例如P_USERMAIL是"--useremail some@email.com",尽管这是任意的,因为您将在您发布的服务启动代码中处理它。

正如您可能知道的,这些值不是持久化的。如果服务无法使用您提供的值进行初始化,则需要重新安装/修复或以另一种方式将它们传递给服务(例如,服务控制台、net start)。

票数 5
EN

Stack Overflow用户

发布于 2012-09-21 15:11:11

有人在这方面有进展吗?我不认为这个论点会在启动时影响我的服务:

代码语言:javascript
复制
          <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"/>

我的服务总是得到一个空的arg数组:

代码语言:javascript
复制
    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();
    }
票数 2
EN

Stack Overflow用户

发布于 2020-03-01 04:31:54

我还没有找到答案,所以这就是我解决同样问题的方法:

two sets of parameters that are available for Windows Services

1)当您使用<ServiceInstall .. Arguments="YOUR Service Args">元素时,您的参数会被添加到服务的"Path to executable“(注册表中的ImagePath)中。

使用Environment.GetCommandLineArgs方法获取参数(请注意,该方法返回的第一个参数是服务名称)。

记住在安装之前将参数保存到配置文件或注册表并读取它们!因为如果您运行修复/更改安装函数,这些参数将会消失。

2)启动参数(一次性参数)。

这些参数是运行服务时在OnStart(string[] args)方法中可用的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10621082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档