原文: PowerShell将Windows store应用程序安装为开发者模式
在本地部署Windows 商店应用程序时,我们会遇到Add-AppDevPackage.ps1脚本,这个脚本和所在安装包都是visual studio 生成的。应用程序安装完毕后为:非开发者模式。我们可以用PowerShell简单验证下:
PS C:\WINDOWS\system32> Get-AppxPackage -Name 88697998-99a4-4d0d-af2d-e3465acd3c20 Name : 88697998-99a4-4d0d-af2d-e3465acd3c20 Publisher : CN=lay Architecture : X86 ResourceId : Version : 1.0.5.0 PackageFullName : 88697998-99a4-4d0d-af2d-e3465acd3c20_1.0.5.0_x86__r60hmjdgart72 InstallLocation : C:\Program Files\WindowsApps\88697998-99a4-4d0d-af2d-e3465acd3c20_1.0.5.0_x86__r60hmjdgart72 IsFramework : False PackageFamilyName : 88697998-99a4-4d0d-af2d-e3465acd3c20_r60hmjdgart72 PublisherId : r60hmjdgart72 IsResourcePackage : False IsBundle : False IsDevelopmentMode : False Dependencies : {Microsoft.NET.CoreRuntime.1.1_1.1.25305.1_x86__8wekyb3d8bbwe, Microsoft.VCLibs.140.00.Debug_14.0.2 5547.0_x86__8wekyb3d8bbwe} IsPartiallyStaged : False
但是我们在visual studio 中直接通过F5调试应用程序时,App会被安装在debug目录下面的某个appx目录,并且安装方式为开发者模式。
PS C:\WINDOWS\system32> Get-AppxPackage -Name 88697998-99a4-4d0d-af2d-e3465acd3c20 Name : 88697998-99a4-4d0d-af2d-e3465acd3c20 Publisher : CN=lay Architecture : X86 ResourceId : Version : 1.0.5.0 PackageFullName : 88697998-99a4-4d0d-af2d-e3465acd3c20_1.0.5.0_x86__r60hmjdgart72 InstallLocation : C:\Users\lay\source\repos\App2\App2\bin\x86\Debug\AppX IsFramework : False PackageFamilyName : 88697998-99a4-4d0d-af2d-e3465acd3c20_r60hmjdgart72 PublisherId : r60hmjdgart72 IsResourcePackage : False IsBundle : False IsDevelopmentMode : True Dependencies : {Microsoft.NET.CoreRuntime.1.1_1.1.25305.1_x86__8wekyb3d8bbwe, Microsoft.VCLibs.140.00.Debug_14.0.2 5547.0_x86__8wekyb3d8bbwe} IsPartiallyStaged : False
那如何指定开发者模式和非开发者模式呢?关键在于Add-AppxPackage的参数使用。比如下面这个方式会安装为非法者模式,Add-AppDevPackage.ps1使用的就是这种方式。
Add-AppxPackage -Path $DeveloperPackagePath.FullName -ForceApplicationShutdown
另一种安装为开发者模式的方式为:
$manifestFile = "$packagePath\AppxManifest.xml" Add-AppxPackage -Register $manifestFile -ForceApplicationShutdown
而且使用注册的方式,文件夹的结构必须类似:
那如果别人给了我们一个visual studio 生成的标准的安装包呢,形如:
我们想把这个包安装在开发者模式下, 应当怎么做呢?
Add-AppDevPackage.ps1肯定不行的。如果我们有一个appx目录就可以使用-register参数来调用Add-AppxPackage了。能把标准的安装包转换成appx目录吗?
HubApp.Windows_1.0.0.2_AnyCPU_Debug.appx文件其实就是一个zip包,我们只需将它重命名为zip后缀名,里面即为appx目录。而且有的安装包可能包含了一个后缀名为appxbundle的文件,它也是一个zip包,里面也会包含一个appx包。
如果使用PowerShell将这种Windows store应用程序的标准安装包安装在开发者模式下,只需3步:
- 在脚本所在的目录下查找appxbundle文件
- 解压 appx 文件,将包内容复制到APPData目录下
- 调用Add-AppxPackage将app安装包安装在开发者模式下
当然交付给最终用户部署时,我们还得考虑用户是否是以管理员权限运行,用户的机器上有没有有效的微软开发者许可证,如果没有引导它获取一个。整个一个流程自动化下来,也得百来十行code。我分享一个自己针对某特定app安装包写的定制版安装脚本:Install-AppPackage.ps1