小编tho*_*sen的帖子

构建后在appx清单中修改包标识

简介:使用makeappx.exe编译后是否可以修改应用程序包标识?

我有一个Windows商店应用程序(用于LOB侧载,而不是商店),我需要创建多个副本(变体/实例),因为我需要能够同时安装和运行多个版本的应用程序作为单个用户.假设我的应用程序名为MyMultiInstanceApp,我想将其克隆为两个名为MyMultiInstanceApp-Prod和MyMultiInstanceApp-Test的应用程序,因为有了这些,我可以在版本1.0中安装并运行*-Prod应用程序,在1.1版中安装*-Test应用程序同时.

我可以通过在Visual Studio中进行多个构建并在每次构建之前更改清单中的包标识(名称)来实现此目的 - 如本地部署Windows应用商店的并行版本中所述.

但是,我希望在构建时间之后,通过基于最初的.appx包创建副本,并且我几乎使用makeappx.exesigntool.exe工作,但是在安装了例如MyMultiInstanceApp-Test之后,应用程序挂起启动.

我的方法如下:

1)通过在VS中构建解决方案或通过msbuild创建初始.appx文件

2)使用以下方法解压缩appx:

makeappx.exe unpack /p MyMultiInstanceApp.appx /d unpacked
Run Code Online (Sandbox Code Playgroud)

3)将AppxManifest.xml中的包标识修改为:

<Identity Name="MyMultiInstanceApp-Test" Publisher="CN=JohnDoe" Version="1.1.0.0" ProcessorArchitecture="neutral" />
<Properties>
  <DisplayName>MyMultiInstanceApp-Test</DisplayName>
...
Run Code Online (Sandbox Code Playgroud)

4)使用以下方法重新打包应用程序:

makeappx.exe pack /d unpacked /p MyMultiInstanceApp-Test.appx
Run Code Online (Sandbox Code Playgroud)

5)使用与初始包相同的证书签署包,使用:

signtool.exe sign /a /v /fd SHA256 /f MyCert.pfx MyMultiInstanceApp-Test.appx
Run Code Online (Sandbox Code Playgroud)

安装新的MultiInstanceApp-Test.appx似乎很成功,但在尝试启动时 - 它只是挂起,并且在条目下的事件查看器中可以看到以下内容:

\应用程序和服务日志\ Microsoft\Windows\Apps\Microsoft-Windows-TWinUI/Operational:

[信息]激活app MyMultiInstanceApp-Test_pf28w44wh44hy!App尝试了.执行状态:尝试激活应用程序,0,操作成功完成.

[错误]激活应用程序MyMultiInstanceApp-Test_pf28w44wh44hy!Windows.Launch合同的应用程序失败,错误:远程过程调用失败.

我是否遗漏了某些内容,或者在编译后无法修改包标识?

windows-runtime windows-store-apps appx appxmanifest

7
推荐指数
0
解决办法
1116
查看次数

在Azure Pipeline YAML中,即使前一阶段的作业失败,如何使用成功('JobName')使阶段运行

我试图让我的第二阶段运行,即使第一阶段的两个作业之一失败,但我无法使用作业状态检查功能让它按预期工作succeeded('JobName')

在下面的 YAML 管道中,我希望只要Job1成功,即使Job2失败,它也会运行Stage2,但事实并非如此:

stages:
  - stage: Stage1
    jobs:
      - job: Job1
        steps:
          - pwsh: echo "Job1"
      - job: Job2
        steps:
          - pwsh: write-error "Job2 error"

  - stage: Stage2
    condition: succeeded('Job1')
    jobs:
      - job: Job3
        steps:
          - pwsh: echo "Job3"
Run Code Online (Sandbox Code Playgroud)

即使Job2失败,只要 Job1 成功,如何让Stage2运行?

使用always()将使Stage2始终运行,但我希望它取决于Job1的成功状态,而不管Job2状态如何。

相关文档:

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&tabs=yaml#conditions

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#job-status-functions

azure-devops azure-pipelines azure-pipelines-yaml

4
推荐指数
1
解决办法
7624
查看次数