我希望 UWP 安装程序检测已安装的 .net 版本,在安装新版本之前处理旧版本的卸载,允许系统管理员对其网络内的 PC 进行大规模安装。对于普通的桌面应用程序来说,这三件事都很容易做到,因为我们可以创建自定义操作并进行静默安装。但是如何使用 appx 文件实现这些功能呢?
2 回答
你根本做不到。应用程序的安装过程uwp
已标准化,可在操作系统支持的所有设备上运行。在为 Hololense、PC、移动设备和 XBOX 编写应用程序时,自定义安装操作没有意义。你将一事无成。
检测已安装的 .net 版本
你为什么要担心这个?您发布为某个 CLR 版本编译的应用程序。如果 PC 缺少此版本,则管理员有过错。
在安装新版本之前卸载旧版本
这将在安装较新版本时自动发生。
允许系统管理员对其网络内的 PC 进行大规模安装
这是可能的,但不是安装过程的一个组成部分。您的管理员必须应用特定的部署过程才能将应用程序分配给所有计算机。
您基本上必须了解侧载 UWP LOB 应用程序的来龙去脉。一旦理解了这一点,您就可以像以前那样简单地编写安装程序,安装程序将为大多数工作流程调用所有适当的 powershell 命令,并为用户登录时设置计划任务以完成其他工作流程。(我建议你的 msi 使用 wix,msiexec 运行那个 msi,psexec 在系统帐户下无头运行一些 msiexec 命令,以及一个 win10 的 vm 来测试你的 msi)
首先,您需要确保您的 LOB 应用程序与证书颁发机构颁发给您的组织的“签名证书”打包在一起。这将告诉windows,您的应用程序已“签署”,由公司实际构建,它说它是。
其次,您需要确保目标机器处于旁加载模式。
由于您希望“允许系统管理员对其网络内的 PC 进行大规模安装”,他们将希望能够为所有用户进行无头安装。因此,您需要在安装程序中包含应用程序的配置。
供应 LOB 应用程序
重要的是要了解您可以将应用程序配置到目标计算机的“在线”Windows 10 映像,或者在准备创建时将应用程序配置为“离线”Windows 10 映像。管理员需要对图像进行在线编辑,因为他们部署到的机器已经在这种情况下运行。
如果应用程序首先不存在,则预配将在 Windows 用户登录时向他们提供 UWP LOB 应用程序。但是,当需要进行更新时,这就不足为奇了——将应用程序的更新留给了另一方。它只是一次向用户提供单个版本的 LOB 应用程序的方法。它也有限制,一个是当配置完成时,不能有任何用户主动登录到机器上,因此必须使用 SCCM 或 PSExec 等工具无头地完成,并且必须使用 SYSTEM 帐户。另一个限制是映像总共只能有 24 个预置的应用程序。
添加预配置的 LOB 应用程序
可以通过 powershell cmdlet 进行配置(如果是 64 位系统,则必须调用 64 位版本的 powershell)
Add-AppxProvisionedPackage -Online -PackagePath <yourpackagepath> -DependencyPackagePath <yourdependencypackagepath> -SkipLicense
^ 从所有用户中注销 - 所以通过 psexec 作为 SYSTEM 或从 SCCM 运行它
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sideload-apps-with-dism-s14
更新配置的 LOB 应用程序
对于已登录到运行 Windows 映像的 PC 的每个用户,只能通过以下 cmdlet(通过 powershell)应用较新版本的预配 LOB 应用程序 。
> Add-AppxPackage
^ 运行时以目标用户身份登录
删除预配置的 LOB 应用程序
从映像中删除预配置的 LOB 应用程序:
> Remove-AppxProvisionedPackage -Online -PackageName MyAppxPkg
^ 从所有用户中注销 - 所以通过 psexec 作为 SYSTEM 或从 SCCM 运行它
从每个活跃的用户卸载旧版本的应用程序:
> Remove-AppxPackage MyAppxPkg
^ 运行时以目标用户身份登录
tl;dr - UWP LOB 应用程序的典型安装程序需要克服许多挑战,但如果您愿意,可以完成!