MSIX改变了我们在安装时配置应用程序的方式。使用MSIX包,您不能再在安装过程中捕获用户输入(应用程序配置),也不能执行任何自定义代码。这意味着您不再有在安装时自定义任何内容的选项。
正如您所说,MSIX中提供的文件是无法篡改的。实现此行为的唯一方法是在首次启动应用程序时检索并应用其他设置。
可以通过手动方式完成此操作,即设计自定义对话框,用户只会在第一次启动应用程序时看到并填写。
或者您可以实现一个自动定制支持,该支持依赖于您的AppInstaller的URL,即每个用户都必须收到不同的AppInstaller链接。当您的软件包安装在系统上时,它将缓存该链接,并且您可以使用预定义的API来查询它,从而根据读取的链接在应用程序中实现自定义行为。
在 MSIX techcommunity 论坛的 这个示例 中,我使用了 PowerShell 脚本,展示了如何将 AppInstaller URL 保存在注册表中。
现在,这个示例依赖于 Advanced Installer 的 Package Support Framework 集成。使用这种方法可以获得更多的灵活性,因为您可以自定义包含在 MSIX 包中的 PS 脚本,而不必更改应用程序的代码。您甚至可以扩展 PS 脚本,根据它读取的 URL 更新配置文件。
然而,您完全可以跳过使用 Package Support Framework,并简单地添加保存 URL 的代码到您的应用程序中。然后,使用下面的示例代码配置您的应用程序,在每次启动时检查此 URL,并根据它读取的 URL 更新您的配置文件。
显然,您的配置文件的默认版本需要包含一个唯一的占位符,这样如果缺少该占位符(即您的应用程序根据检测到的URL替换了相应的配置),则可以跳过检查AppInstaller URL。
[Windows.ApplicationModel.Package, indows.ApplicationModel,ContentType=WindowsRuntime]
$path = [Windows.ApplicationModel.Package]::Current.GetAppInstallerInfo().Uri.AbsolutePath
非常重要!请确保将配置文件保存在
AppData文件夹中,而不是安装文件夹中(当使用MSI时可能会这样做)。如果尝试写入安装文件夹中的任何文件,则应用程序将失败。
对于MSIX包应用程序,AppData的处理方式有所不同,您可以在此处阅读更多: