我创建了一个通过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,但这不是正确的方式,我宁愿做正确的事。
答案 0 :(得分:1)
一般问题是安装程序类是使用反射实例化的,来自执行安装的msiexec服务调用的C ++填充程序Dll。在这种环境中,加载程序集和可执行文件时会自动运行的东西&#34;通常&#34;没有发生。换句话说,你必须自己完成Xml工作,准确指定设置文件路径(因为在这种环境中也没有有用的默认工作目录)。