gpt4 book ai didi

clickonce - 使用 mage.exe 退出 Clickonce list

转载 作者:行者123 更新时间:2023-12-03 08:21:04 27 4
gpt4 key购买 nike

简单的场景。作为发布过程的一部分,Visual Studio 生成内容并对其进行签名。

然后我去MyApp.dll.config.deploy文件并更新一些设置。

现在,当我尝试安装该应用程序时,clickonce 安装程序会显示 MyApp.dll.config具有与 list 中指定的不同的计算哈希值。

所以我尝试了 mage.exe -sign MyApplicationManifest -certfile ... -password ...结果是 MyApp.vsto successfully signed
但我仍然收到计算出的哈希错误。我错过了一步吗?

我已阅读以下链接:
http://msdn.microsoft.com/en-us/library/acz3y3te(v=vs.110).aspx
http://blogs.msdn.com/b/msiclickonce/archive/2009/07/17/clickonce-application-fails-after-changing-configuration-file-and-resigning-the-manifest.aspx

最佳答案

需要执行几个步骤才能退出 list 。我使用powershell自动完成。

  • 如果发布步骤已使用 .deploy 重命名文件您需要将它们重命名回原始扩展名。
  • 运行 mage.exe -update在您的应用程序 list 上。如果你有一个部署 list ,你需要做同样的事情,除了在 mage.exe 的命令行参数中你需要指定应用程序 list 的相对位置。
  • 将所有文件重命名回 .deploy 扩展名(除 list 外的所有文件。
  • 如果您有 setup.exe bootstrap 并且您更改了它(例如更新 URL),则必须使用 delcert.exe 删除签名。然后使用 signtool.exe 对其进行签名

  • 注意:一旦 exe 被签名,它就不能用 signtool 重新签名,除非您使用 delcert.exe 删除签名。

    如果您的 clickonce 是 VSTO clickonce,您的 list 名称会有所不同(我认为 MyApp.dll.manifest 与 MyApp.exe.manifest)。

    更新 我已经包含了敏感信息被编辑的 powershell 脚本。
    $root = "$PSScriptRoot"
    $ToolsPath = "C:\Tools"
    $CertFile = $ToolsPath + "\REMOVED"
    $CertPassword = "REMOVED"

    #Update the setup.exe bootstrappers update url
    Start-Process "$PSScriptRoot\setup.exe" -ArgumentList "-url=`"$ClickOnceUpdateUrl`"" -Wait

    #The bootstrappers signature is now invalid since we updated the url
    #We need to remove the old signature
    Start-Process 'C:\Tools\delcert.exe' -ArgumentList "`"$root\setup.exe`"" -Wait

    Write-Host "$root [writeline]"
    #Resign with signtool
    Invoke-Expression 'C:\Tools\signtool.exe sign /d "PUBLISHER NAME" /f "$CertFile" /p "$CertPassword" "$root\setup.exe"'

    #update config properties
    $CodeBasePath = Convert-Path "$PSScriptRoot\Application Files\MYAPP_*"
    $ConfigPath = $CodeBasePath + "\MYAPP.dll.config.deploy"
    [xml] $xml = Get-Content $ConfigPath

    $ApiEndpoint = $xml.SelectSingleNode('/configuration/appSettings/add[@key="MYAPP:ApiBaseUrl"]')
    $ApiEndpoint.value = $MYAPPApiEndpoint
    $xml.Save($ConfigPath)

    #Begin Resigning various Manifests
    $AppManifestPath = Convert-Path "Application Files\MYAPP_*\MYAPP.dll.manifest"

    #Need to resign the application manifest, but before we do we need to rename all the files back to their original names (remove .deploy)
    Get-ChildItem "$CodeBasePath\*.deploy" -Recurse | Rename-Item -NewName { $_.Name -replace '\.deploy','' }

    #Resign application manifest
    Invoke-Expression 'C:\Tools\mage.exe -update "$CodeBasePath\MYAPP.dll.manifest" -certFile "$CertFile" -password "$CertPassword" -if "ID.ico"'

    #Regisn deployment manifests in root and versioned folder
    Invoke-Expression 'C:\Tools\mage.exe -update "$CodeBasePath\MYAPP.vsto" -certFile "$CertFile" -password "$CertPassword" -appManifest "$AppManifestPath" -pub "PUBLISHER NAME" -ti "http://timestamp.globalsign.com/scripts/timstamp.dll"'
    Invoke-Expression 'C:\Tools\mage.exe -update "$root\MYAPP.vsto" -certFile "$CertFile" -password "$CertPassword" -appManifest "$AppManifestPath" -pub "PUBLISHER NAME" -ti "http://timestamp.globalsign.com/scripts/timstamp.dll"'

    #Rename files back to the .deploy extension, skipping the files that shouldn't be renamed
    Get-ChildItem -Path "Application Files\*" -Recurse | Where-Object {!$_.PSIsContainer -and $_.Name -notlike "*.manifest" -and $_.Name -notlike "*.vsto"} | Rename-Item -NewName {$_.Name + ".deploy"}

    关于clickonce - 使用 mage.exe 退出 Clickonce list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004056/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com