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