使用參數啟動 Windows 應用程式

調查

[開始] 功能表中的某些 Windows 應用程式啟動器需要在啟動 Windows 應用程式時,將參數傳遞給可執行檔。 為了達成此目的,我們必須先找出需要參數的啟動器,才能將 Windows 應用程式與套件支援架構整合。

識別 Windows 應用程式 Launcher 參數需求

  1. 在測試電腦上安裝您的 Windows 應用程式。

  2. 開啟Windows 開始] 功能表

  3. 在 [開始] 功能表中,找出並選取您的 Windows 應用程式 Launcher。

  4. 如果應用程式啟動,則您沒有任何問題 (在 [開始] 功能表) 中測試所有相關 Windows 應用程式啟動器。

  5. 從測試電腦卸載 Windows 應用程式。

  6. 使用 Win32 安裝媒體,將應用程式安裝到您的測試電腦。

  7. 開啟Windows 開始] 功能表

  8. 在 [開始] 功能表中,找出並以滑鼠右鍵按一下您的 Windows 應用程式。

  9. 從下拉式功能表中選取更多開啟的檔案位置。

  10. 以滑鼠右鍵按一下第一個相關聯的應用程式快捷方式 (針對所有相關聯的應用程式快捷方式) 重複接下來三個步驟。

  11. 從下拉式功能表中選取 [ 屬性 ]。

  12. 檢查 [ 目標] 文字方塊右邊的值。 在應用程式檔路徑之後,如果有列出某個參數,則會在[目標] 中使用參數的 [檔案屬性] 視窗中顯示此應用程式範例

  13. 記錄參數值以供日後使用。

解決方案

Windows Apps 會將與應用程式相關的特定目錄重新導向至 Windows 應用程式容器檔案夾。 如果應用程式嘗試寫入 Windows 應用程式容器,將會觸發錯誤,而且寫入將會失敗。

若要解決與 Windows 應用程式無法寫入 Windows 應用程式容器相關的問題,我們必須遵循下列四個步驟:

  1. 將 Windows 應用程式暫存至本機目錄
  2. 建立 Config.xml 並插入必要的 .PSF 檔
  3. 更新 Windows 應用程式 package.appxmanifest 檔
  4. 重新封裝和簽署 Windows 應用程式

上述步驟說明如何將 Windows 應用程式的內容解壓縮至本機臨時目錄、將 .psf 修復檔案插入預備的 Windows 應用 Launcher 程式目錄、將應用程式設定為指向 .psf 啟動器,然後設定 .psf 的 config.xml 檔案,以將 .psf 啟動器重新導向至指定工作目錄的應用程式。

下載並安裝必要的工具

此程式將會引導您完成和使用下列工具:

  • NuGet 用戶端工具
  • 套件支援架構
  • Windows 10 SDK (最新版本)
  • SysInternals 進程監視

以下將提供有關下載及安裝必要工具的逐步指引。

  1. 下載NuGet 用戶端工具的最新 (非預覽) 版,並將nuget.exe儲存在資料夾中

  2. 從系統管理 PowerShell 視窗中執行下列程式,以使用 Nuget 下載套件支援架構:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. 下載並安裝Windows 10 軟體發展工具組 (Win 10 SDK)

    1. 下載「 Win 10 SDK」。
    2. 執行上一個步驟中所下載的 winsdksetup.exe
    3. 選取 [下一步] 按鈕。
    4. 只選取下列三個安裝功能:
      • 適用于桌面應用程式的 Windows SDK 簽署工具
      • UWP c + + 應用程式的 Windows SDK
      • 適用于 UWP 應用程式的 Windwos SDK 當地語系化
    5. 選取 [安裝] 按鈕。
    6. 選取 [ 確定] 按鈕。

暫存 Windows 應用程式

藉由暫存 Windows 應用程式,我們會將 Windows 應用程式的內容解壓縮/解除封裝至本機目錄。 將 Windows 應用程式解壓縮至預備位置之後,就可以插入 .psf 修復檔案,以更正任何不需要的體驗。

  1. 開啟系統管理 PowerShell 視窗。

  2. 設定下列以特定應用程式檔為目標的變數,以及 Windows 10 SDK 版本:

    $AppPath          = "C:\PSF\SourceApp\PSFSampleApp.msix"         ## Path to the MSIX App Installer
    $StagingFolder    = "C:\PSF\Staging\PSFSampleApp"                ## Path to where the MSIX App will be staged
    $OSArchitecture   = "x$((gwmi Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. 藉由執行下列 PowerShell Cmdlet,將 Windows 應用程式解壓縮至暫存資料夾:

    ## Sets the directory to the Windows 10 SDK
    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    
    ## Unpackages the Windows App to the staging folder
    .\makeappx.exe unpack /p "$AppPath" /d "$StagingFolder"
    

建立並插入所需的 .PSF 檔案

若要將矯正措施套用至 Windows 應用程式,必須建立設定json檔案,並提供失敗的 Windows 應用程式 Launcher 的相關資訊。 如果有多個 Windows 的應用程式啟動器遇到問題,則可以使用多個專案更新config.xml檔案。

更新設定json檔案之後,必須將config.xml檔案和支援的 .psf 修復檔案移至 Windows 應用程式封裝的根目錄中。

  1. 開啟 Visual Studio Code (VS Code) 或任何其他文字編輯器。

  2. 選取 VS Code 頂端的 [檔案] 功能表,然後從下拉式功能表中選取 [新增檔案],以建立新檔案。

  3. 將檔案儲存為config.xml,方法是選取 VS Code 視窗頂端的 [檔案] 功能表,然後從下拉式功能表中選取 [儲存]。 在 [另存新檔] 視窗中,流覽至 Windows 應用程式臨時目錄 (C:\PSF\Staging\PSFSampleApp) 並將檔案名設定為 。 選取 [儲存] 按鈕。

  4. 將下列程式碼複製到新建立的 config.xml 檔案。

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "arguments": ""
            }
        ]
    }
    
  5. 使用) 或其他文字編輯器,開啟位於 Windows 應用程式暫存資料夾中的暫存 Windows 應用程式package.appxmanifest檔 (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml VS Code。

    <Applications>
        <Application Id="PSFSAMPLE" Executable="VFS\ProgramFilesX64\PS Sample App\PSFSample.exe" EntryPoint="Windows.FullTrustApplication">
        <uap:VisualElements BackgroundColor="transparent" DisplayName="PSFSample" Square150x150Logo="Assets\StoreLogo.png" Square44x44Logo="Assets\StoreLogo.png" Description="PSFSample">
            <uap:DefaultTile Wide310x150Logo="Assets\StoreLogo.png" Square310x310Logo="Assets\StoreLogo.png" Square71x71Logo="Assets\StoreLogo.png" />
        </uap:VisualElements>
        </Application>
    </Applications>
    
  6. applications.idapplications.id中的值設定為與AppxManifest.xml檔案的Applications.Application.ID欄位中所找到的相同值。 影像會在 Package.appxmanifest 檔案中將識別碼的位置圈起來。

  7. 將設定 applications.executable 中的值設為目標applications.executable指向應用程式中的應用程式的相對路徑(位於AppxManifest.xml檔案的應用程式.可執行檔欄位中)。 影像會將可執行檔的位置圈到 Package.appxmanifest 檔中。

  8. applications.argumentsapplications.arguments 中的值設定為與用來啟動應用程式的引數相符。 請參閱調查 Windows 應用程式的最後一個步驟中記錄的值 Launcher 參數需求指導方針。

  9. 將設定 applications.workingdirectory 中的值設定為,以在AppxManifest.xml檔案的applications.workingdirectory欄位中找到的相對資料夾路徑為目標。 影像會將工作目錄的位置圈到 Package.appxmanifest 檔案內。

  10. 儲存更新的 config.xml 檔案。

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. 根據應用程式可執行檔架構,將下列四個檔案從封裝支援架構複製到預備的 Windows 應用程式的根目錄。 下列檔案位於 .\Microsoft.PackageSupportFramework.\bin中。

    應用程式 (x64) 應用程式 (x86)
    PSFLauncher64.exe PSFLauncher32.exe
    PSFRuntime64.dll PSFRuntime32.dll
    PSFRunDll64.exe PSFRunDll32.exe

更新 Package.appxmanifest

建立和更新config.xml檔案之後,必須針對設定中包含的每個 Windows 應用程式 Launcher 更新 Windows 應用程式的AppxManifest.xmlPackage.appxmanifest的應用程式現在必須將目標設為與應用程式架構相關聯的PSFLauncher.exe

  1. 開啟檔案總管,然後流覽至暫存的 MSIX 應用程式資料夾, (C:\PSF\Staging\PSFSampleApp) 。

  2. 以滑鼠右鍵按一下 AppxManifest.xml,然後從下拉式功能表中選取 [ 開啟檔案程式碼 ] (您也可以選擇使用其他文字編輯器) 來開啟。

  3. 以下列資訊更新 AppxManifest.xml 檔案:

    <Package ...>
    ...
    <Applications>
        <Application Id="PSFSample"
                    Executable="PSFLauncher32.exe"
                    EntryPoint="Windows.FullTrustApplication">
        ...
        </Application>
    </Applications>
    </Package>
    

重新封裝應用程式

所有更正都已套用,現在 Windows 的應用程式可以重新封裝成 MSIX,並使用程式碼簽署憑證進行簽署。

  1. 開啟系統管理 PowerShell 視窗。

  2. 設定下列變數:

    $AppPath          = "C:\PSF\SourceApp\PSFSampleApp_Updated.msix" ## Path to the MSIX App Installer
    $CodeSigningCert  = "C:\PSF\Cert\CodeSigningCertificate.pfx"     ## Path to your code signing certificate
    $CodeSigningPass  = "<Password>"                                 ## Password used by the code signing certificate
    $StagingFolder    = "C:\PSF\Staging\PSFSampleApp"                ## Path to where the MSIX App will be staged
    $OSArchitecture   = "x$((gwmi Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. 藉由執行下列 PowerShell Cmdlet,從預備資料夾重新封裝 Windows 應用程式:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. 藉由執行下列 PowerShell Cmdlet 來簽署 Windows 的應用程式:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath