在安装时提供配置设置

时间:2017-10-08 10:52:53

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

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

    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>

这并不保存设置,因此我使用了Google。我发现最接近的是this question,但是我并不完全理解它的建议(我对C#来说很陌生)。我使用完整的ServiceModel部分组吗?我确定我可以弄清楚如何直接编辑XML,但这不是正确的方式,我宁愿做正确的事。

1 个答案:

答案 0 :(得分:1)

一般问题是安装程序类是使用反射实例化的,来自执行安装的msiexec服务调用的C ++填充程序Dll。在这种环境中,加载程序集和可执行文件时会自动运行的东西&#34;通常&#34;没有发生。换句话说,你必须自己完成Xml工作,准确指定设置文件路径(因为在这种环境中也没有有用的默认工作目录)。