我有一个成熟的wcf应用程序,目前与wix打包在一起,可以生成msi。当msi安装在用户的pc上时(使用wix /msi gui或使用带有powershell remoting的自动化msiexec ),它们会传递一些参数,比如保存到应用程序的app.config文件中的应用程序后端web服务的URL。
我正在寻找用MSIX替换wix安装程序的过程。对我来说,这种切换的主要好处是,用户可以自己从web服务器URL安装应用程序,而不必费力地下载和运行MSI。
为了实现简单的点击和安装过程,并能够在不同的客户环境中阶段我的MSIX,我需要一些方法来设置我的应用程序的后端URL的每个环境,当我阶段的应用程序。考虑到MSIX是一个自我容器包,它的所有文件都经过哈希和签名,以确保它不会被篡改,有没有一种方法可以让我在上载应用程序时发送不同的URL,而不必在每次上载应用程序时重新打包它?
对于上下文,这个应用程序是我们为许多客户定制的产品,所以在内部,我们有很多环境,我们经常使用自动化工具部署到这些环境中,所以我想避免在设置新环境时必须动态重新打包。
我基本上想将config与一起发布,但不是在msix中。
发布于 2020-10-06 00:16:37
MSIX改变了我们在安装时配置应用程序的方式。使用MSIX包,您不能再在安装过程中捕获用户输入(应用程序配置),也不能执行任何自定义代码。这意味着您不再拥有在安装时自定义任何内容的选项。
正如您所说,在MSIX中传递的文件不能被篡改。实现此行为的唯一方法是在应用程序首次启动时检索并应用附加设置。
在MSIX技术社区论坛的this example中,我使用PowerShell脚本包含了a sample which shows how you can save the AppInstaller URL in the registry。
现在,此示例依赖于Package Support Framework integration from Advanced Installer。使用这种方法,您可以获得更大的灵活性,因为您可以自定义MSIX包中包含的PS脚本,而无需更改应用程序的代码。您甚至可以扩展PS脚本,以根据它读取的URL更新配置文件。
但是,您可以完全跳过使用Package Support Framework,只需添加在应用程序中保存URL的代码即可。然后使用下面的示例代码将应用程序配置为在每次启动时检查此URL,并根据读取的URL更新配置文件。
显然,默认版本的配置文件需要包含唯一的占位符,这样,如果缺少占位符,您可以跳过检查AppInstaller地址(即,您的应用程序根据检测到的URL,用相应的配置替换了它)
[Windows.ApplicationModel.Package, indows.ApplicationModel,ContentType=WindowsRuntime]
$path = [Windows.ApplicationModel.Package]::Current.GetAppInstallerInfo().Uri.AbsolutePath非常重要!请确保您将配置文件保存在AppData文件夹中,而不是保存在安装文件夹中(就像使用MSI时所做的那样)。如果您尝试写入安装文件夹中的任何文件,您的应用程序将失败。
AppData对于MSIX软件包应用的处理方式有所不同,你可以在这里阅读更多内容:
发布于 2020-10-06 18:33:02
你有没有看过modification packages
这些文件有点类似于MSI转换文件,但可以比MSIX文件晚安装(如addon或DLC包)。它们基本上允许您在原始软件包的虚拟文件系统中添加或覆盖文件。您的应用程序可以读取存储URL的配置文件,然后可以通过安装修改包对其进行修改,而不必接触原始的MSIX包。
https://stackoverflow.com/questions/64169886
复制相似问题