使用包支持框架运行脚本来创建应用程序快捷方式

本文档介绍如何使用包支持框架(PSF)创建应用程序快捷方式,该框架通过 MSIX 打包工具和Contoso Expense WPF 应用程序运行脚本。

contoso 支出

其思路是通过 PSF 脚本将包中可用的应用程序快捷方式复制到用户的桌面。

请记住以下几点:

  1. 仅当绝对必要时才创建快捷方式。 目标是不使用户的桌面混乱。
  2. 必须在创建快捷方式之前安装 MSIX 应用程序,以便在创建快捷方式期间指定 MSIX 应用程序路径。
  3. 同时,MSIX 应用程序路径可以在安装文件夹中指定版本号后更改。 Contoso Expenses 安装路径的示例:

C:\Program Files\WindowsApps\ContosoExpenses_1.0.0.0_x86__3z09h3y28h0qg

为了避免每次更新应用程序时更改应用程序快捷方式,请通过指向 AppExecutionAlias 创建快捷方式。 AppExecutionAlias 允许它使用应用程序清单的别名会话中定义的值启动应用程序,因此无需指定完整的应用程序路径。 因此,在创建快捷方式之前,请在应用程序清单中定义别名。 否则,Windows 资源管理器将无法识别别名,并且不允许我们创建快捷方式。

创建应用程序别名

单击“ 包信息 ”菜单项,然后单击 UI 底部提供的 “打开文件”以编辑应用程序清单:

打开 msix 清单

包括用于创建别名的以下命名空间,如下所示:

xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" 

IgnorableNamespaces 元素中包含值 uap3桌面

IgnorableNamespaces="uap uap3 desktop rescap build"

在 </uap:VisualElements> 元素后添加应用程序的执行别名

  <Extensions>
    <uap3:Extension Category="windows.appExecutionAlias"   
                    Executable="ContosoExpenses\ContosoExpenses.exe"
                    EntryPoint="Windows.FullTrustApplication">
      <uap3:AppExecutionAlias>
        <desktop:ExecutionAlias Alias="contosoexpenses.exe" />
        </uap3:AppExecutionAlias>
      </uap3:Extension>
  </Extensions>

根据修改后的清单执行操作:

创建别名

保存关闭 清单文件。

切换回 MSIX 打包工具并 生成新包。 创建包后,通过别名 安装包 并启动应用程序,例如,按 Win+R 并键入 contosoexpenses

使用别名启动

创建别名后,可以继续执行后续步骤。

创建应用程序快捷方式

使用别名 contosoexpenses.exe在首选项文件夹中创建新的应用程序快捷方式,如下所示:

新应用快捷方式

为 Contoso Expenses 命名快捷方式:

新建应用完成创建快捷方式

默认情况下,快捷方式将是一个通用图标:

泛型应用快捷方式

更改快捷方式非常简单,但此处的挑战是避免使用具有版本号的完整应用程序路径,并且可能会在将来的更新中更改。 解决此问题的一种方法是将图标从包复制到 MSIX 应用程序使用的 %appdata%,即没有版本号的 %localappdata%\Packages\ContosoExpenses_3z09h3y28h0qg\LocalCache\Roaming_ 文件夹。

若要更改应用程序快捷方式,现在需要手动将图标复制到该文件夹。 稍后将使用 PSF 脚本自动执行此作。

appdata 快捷方式

现在,可以将快捷图标更改为 %localappdata% 路径:

新路径快捷方式

仍在快捷方式属性中,利用此界面更改“目标”和“起始位置”属性参数对应的值:%localappdata%\Microsoft\WindowsApps\contosoexpenses.exe 和 %localappdata%\Microsoft\WindowsApps

新参数快捷键

现在快捷方式正常工作,下一步是将其添加到包并自动执行创建过程。

新快捷方式

获取 PSF 文件

PSF Github 存储库下载 PSFBinaries.zip

来自 GitHub 版本的 psf

将所需的 32 位或 64 位文件提取到包目录的根目录,具体取决于应用程序是 32 位还是 64 位文件。 使用下表作为指南。

应用程序可执行文件为 x64 应用程序可执行文件为 x86
PSFLauncher64.exe PSFLauncher32.exe
PSFRuntime64.dll PSFRuntime32.dll

在包中包含 PSF 文件

通过 MSIX 打包工具编辑 Contoso Expense

github edit mpt 中的 psf

单击“ 包文件 ”菜单项,单击“ ”文件夹的右侧按钮,然后选择“ 添加文件...”

来自 github 的 psf 添加 psf 文件

由于此处的 ContosoExpense 版本为 32 位,因此已添加 PSF 所需的 32 位文件。 包裹内容现在应如下所示:

来自 github 的 psf psf 添加的文件

更新 PSF 的包清单

单击“ 包信息 ”菜单项,然后单击 UI 底部提供的 “打开文件”以编辑应用程序清单:

github edit manifest 中的 psf

在此步骤中,必须更改应用程序入口点(ContosoExpenses\ContosoExpenses.exe) by the PSFLauncher32.exe)。

 <Application Id="App" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication">

保存关闭 清单文件。

创建 config.json 文件

切换回 MSIX 打包工具,单击 “包文件”,选择“包”文件夹,并添加包含以下内容的新 config.json 文件。

{
  "applications": [
    {
      "id": "App",
      "executable": "ContosoExpenses\\ContosoExpenses.exe",
      "workingDirectory": "ContosoExpenses\\",
      "startScript":
      {
        "scriptPath": "createshortcut.ps1",
        "runInVirtualEnvironment": false,
        "waitForScriptToFinish": true,
        "showWindow": false,
        "runOnce": true
      }
    }
  ]
}

👀 请注意,应用程序 ID 与清单中相同:

必须在包根目录中创建 config.json 文件,如下所示:

github 中的 psf

config.json 文件用于指定 createshortcut.ps1 脚本应在第一次应用程序初始化中仅运行一次。 由于 工作目录 设置为 ContosoExpenses 因此必须将createshortcut.ps1 脚本(稍后创建)和 StartingScriptWrapper.ps1 脚本(来自 PSF 文件)添加到 ContosoExpenses 文件夹中。

创建 PowerShell 脚本

使用以下内容创建 createshortcut.ps1 脚本:

Copy-Item "Contoso Expenses.lnk" "$env:USERPROFILE\desktop\Contoso Expenses.lnk"

Copy-Item "contoso.ico" $env:APPDATA\contoso.ico

createshortcut.ps1 脚本会将之前创建的 “Contoso Expenses.lnk” 快捷方式复制到用户桌面。该快捷方式将在包中提供。 第二条指令将 contoso.icon 复制到 MSIX APPDATA 文件夹(%localappdata%\Packages\ContosoExpenses_3z09h3y28h0qg\LocalCache\Roaming)。

下一步是将以下文件复制到包的 ContosoExpenses 文件夹:

  • Contoso Expenses.lnk
  • Contoso.ico
  • StartingScriptWrapper.ps1
  • createshortcut.ps1

最后,最后一步是 创建安装 新版本的应用程序包。 在第一个应用程序初始化期间,createshortcut.ps1 脚本将运行,它将在用户桌面中创建 Contoso Expense 快捷方式