c# - 如何使用 MSIX 允许可编辑的 .Net 生成的配置文件?

标签 c# .net windows asp.net-core msix

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

Writes under C:\Program Files\WindowsApps\package_name are not allowed.Writes under C:\Program Files\WindowsApps\package_name are not allowed.

我面临的问题是 MSIX 安装程序使得它的 Program Files 沙盒版本中的文件无法写入 ( see above )。这意味着无法配置此应用程序,因此我不仅要弄清楚如何使该应用程序再次可配置,还要弄清楚 Windows 希望如何处理应用程序配置。

现在似乎有两种通用方法可以做到这一点:

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

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

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

如果您建议#2:

  1. 您建议该目录存在于何处(特别是 MSIX 允许存在于何处)?
  2. 如何告诉 .Net 应用程序文件不在旁边?我可以只使用 AppData.CurrentDomain.SetData 吗?

最佳答案

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

在 AppData 中,您应该只存储实际的用户文件(例如由特定用户在您的应用程序中执行的操作生成的文件或设置 - 因此不同的用户使用不同的文件)。

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

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

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

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

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

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

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

关于c# - 如何使用 MSIX 允许可编辑的 .Net 生成的配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65296427/

相关文章:

.net - 在 C++/CLI 中创建具有空维度大小的多维数组

windows - 构建规则中的 Bazel 环境变量

c# - 在不同的 AppDomains 中使用的类的静态变量

c# - 拆分字符串并在第一次出现后获取所有内容 - C#

c# - 将 "option(maxrecursion 0)"与 Entity Framework Entity Sql 一起使用

使用 ConfigureAwait(false) 的 C# async/await 链接

c# - 无法在 C# 中使用 Gmail SMTP 发送邮件

c# - WCF:具有多个模块的数据协定序列化程序

windows - 在 Windows 批处理文件中查找文件并按大小排序

java - 在 Windows 中更改 Java 安全文件