如何允许使用MSIX编辑.Net生成的配置文件



我正试图帮助将.Net服务移植到更现代的.Net版本(可能是Core(并使用MSIX安装程序。该应用程序有几个由编译器生成的配置文件(在源文件中,它们是app.config,但经过编译后变成了*.exe.xml(,它们安装在二进制文件旁边的程序文件中,还有一个GUI助手应用程序,应用程序本身可以修改它们以更改服务行为(端口、ip、tls-cert等(。

不允许在C:\Program Files\WindowsApps\package_name下写入。不允许在C:\Program Files\WindowsApps\package_name下写入。

我面临的问题是MSIX安装程序使其沙盒版本的程序文件中的文件无法写入(请参阅上文(。这意味着这个应用程序无法配置,所以我不仅想知道如何让应用程序再次配置,还想知道windows希望如何处理应用程序配置。

现在看来有两种通用的方法可以做到这一点:

  1. 将配置数据写入服务帐户的AppData/本地文件夹
  2. 尝试在另一个文件夹中模仿/etc/Myservice行为。(表示本地系统范围的目录,其中包含服务的配置数据(

如果您建议#1,请回答以下附加问题:

  1. 如何将应用程序配置文件移动到用户配置文件目录
  2. 拥有普通帐户的管理员如何使用上述GUI助手应用程序修改服务帐户的AppData文件夹中的配置文件?(他们是否需要启用桌面访问服务帐户、登录并运行GUI(

如果你建议#2:

  1. 你建议这个目录存在于哪里(特别是MSIX允许它存在的地方(
  2. 如何告诉.Net应用程序文件不在它旁边?我可以只使用AppData.CurrentDomain.SetData吗

好吧,在系统帐户上运行的服务对所有用户来说都是一样的,所以我想说CommonApplicationData是一个更好的存储其设置的文件夹,而不是appdata。您的服务和任何需要部署自定义配置文件的管理员都可以轻松访问此文件夹。

在AppData中,您应该只存储实际的用户文件(如特定用户在应用程序内执行的操作生成的文件或设置,从而为不同用户存储不同的文件(。

现在,第二部分是您需要配置代码以从自定义路径加载配置文件,而不是在EXE旁边查找它。我不是.NET专家,但经过快速搜索,我发现了这个:

  • 正在将app.config文件重新定位到自定义路径

部署应用程序自定义的现代方法

我不清楚的是,您的客户是如何使用GUI帮助工具来自定义配置文件的。这只是IT部门的某个人用来生成配置文件的工具吗?然后他们会复制该文件,并使用MSI/MST文件(或通过其他自定义部署方法(将其部署到最终用户机器上?

如果您的应用程序仅由IT人员部署,那么您可以尝试另一种更简单(也更优雅(的解决方案,为其提供自定义配置文件,实际上不需要任何代码更改。

您仍然可以将配置文件留在ProgramFiles中EXE旁边,并指示部署应用程序的IT团队使用MSIX修改包来部署GUI助手生成的自定义配置文件。(请查看上面的链接以获取示例-文章末尾有视频版本(。

注意:IT团队可以使用多种免费或付费工具来生成MSIX修改包

当然,GUI辅助工具仍然需要在允许的文件夹中生成自定义的配置文件,因为它不能再在ProgramFiles下写入。因此,实际上,在这种情况下,您也需要修改一点代码。

最新更新