【问题标题】:Provide config settings at install time在安装时提供配置设置
【发布时间】:2017-10-09 04:40:58
【问题描述】:

我创建了一个通过 MSI 安装的 Windows 服务。该服务需要一个主机/IP、端口和路径来进行通信,我已在 VS2017 Settings.settings 中将其作为单独的属性添加。我现在想让安装程序接受用户输入并将设置写入我的配置文件。首先,我尝试了以下方法:

    public override void Install(IDictionary stateSaver)
    {
        string server;
        string port;
        string path;

        base.Install(stateSaver);

        server = this.Context.Parameters["SERVER"];
        port = this.Context.Parameters["PORT"];
        path = this.Context.Parameters["PATH"];

        Properties.Settings.Default.server = server;
        Properties.Settings.Default.port = port;
        Properties.Settings.Default.path = path;

        Properties.Settings.Default.Save();
    }

还有我的 app.config 文件的摘录...

<userSettings>
    <myService.Properties.Settings>
        <setting name="server" serializeAs="String">
            <value />
        </setting>
        <setting name="port" serializeAs="String">
            <value />
        </setting>
        <setting name="path" serializeAs="String">
            <value />
        </setting>
    </myService.Properties.Settings>
</userSettings>

这不会保存设置,所以我求助于谷歌。我找到的最接近的东西是this question,但是我不完全理解它的建议(我对 C# 很陌生)。我使用的是完整的 ServiceModel 部分组吗?我确信我可以弄清楚如何直接编辑 XML,但这将是一个错误而不是正确的方法,我宁愿做对。

【问题讨论】:

    标签: c# configuration windows-installer user-input


    【解决方案1】:

    一般问题是安装程序类是使用反射从 C++ shim Dll 中实例化的,该 Dll 由执行安装的 msiexec 服务调用。在这种环境中,“正常”加载程序集和可执行文件时发生的自动操作不会发生。换句话说,您必须自己完成 Xml 工作,准确指定设置文件路径(因为在此环境中也没有有用的默认工作目录)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多