Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对Visual Studio.msi的安装文件进行签名_C#_Visual Studio 2008_Authenticode_Code Signing Certificate - Fatal编程技术网

C# 如何对Visual Studio.msi的安装文件进行签名

C# 如何对Visual Studio.msi的安装文件进行签名,c#,visual-studio-2008,authenticode,code-signing-certificate,C#,Visual Studio 2008,Authenticode,Code Signing Certificate,我最近从globalsign购买了一个authenticode证书,在为部署签名文件时遇到问题。有两个.exe文件由项目生成,然后放入.msi。当我使用signtool对.exe文件进行签名时,证书是有效的,并且运行正常。问题是,当我构建.msi(使用visual studio安装项目)时,.exe文件会丢失其签名。因此,我可以在.msi生成后对其进行签名,但安装的.exe文件将继续整个“未知发布者”业务。如何保留这些文件上的签名以便在客户端计算机上安装?Visual Studio在编译时创建两

我最近从globalsign购买了一个authenticode证书,在为部署签名文件时遇到问题。有两个.exe文件由项目生成,然后放入.msi。当我使用signtool对.exe文件进行签名时,证书是有效的,并且运行正常。问题是,当我构建.msi(使用visual studio安装项目)时,.exe文件会丢失其签名。因此,我可以在.msi生成后对其进行签名,但安装的.exe文件将继续整个“未知发布者”业务。如何保留这些文件上的签名以便在客户端计算机上安装?

Visual Studio在编译时创建两个文件夹:obj和bin。结果是,至少在我的例子中,输出总是从obj文件夹复制到bin文件夹中。我对bin文件夹中的可执行文件进行了签名,结果被覆盖,然后打包到msi中。对obj文件夹中的可执行文件进行签名解决了这个问题

您可以将以下PostBuildEvent添加到VS安装项目(项目属性):

Windows 8.0:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a  $(BuiltOuputPath)
Windows 10:

"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /a  $(BuiltOuputPath)

有关signtool的用法,请参阅。您可以使用/f标志指定签名证书,/p指定证书的密码等

另外,请注意$(BuildOuputPath)拼写错误。感谢microsoft…

其他选项(我正在做的)是先创建.msi,然后使用pfx(证书)对其进行签名

(我正在使用在globalsign.com上购买的代码签名证书)

打开命令: 运行->powershell

在证书所在的位置运行并保存指纹:

PS C:\Windows\system32>获取PfxCertificate-FilePath。\CompanyCertificate.pfx

如果将得到类似这样的值,则必须在以下执行行中替换值

然后找到singtool.exe所在的位置并转到那里(在我的情况下,Win 10,msi也必须位于同一路径),然后执行以下操作:

PS C:\Program Files (x86)\Windows Kits\10\App Certification Kit> .\signtool.exe sign /f CompanyCertificate.pfx /d "App Description" /p pfxPasswordHere /v /sha1 ABCFEDRABF229B78BF9C40EC47007C1234567890 /t "http://timestamp.comodoca.com/authenticode" MyApplicationSetup.msi
成功签名的文件数:1

警告数量:0

错误数:0

恭喜你成功了

您将在.msi属性下看到此新选项卡:

最后尝试安装:


非常感谢。我曾看到人们试图传达同样的信息,尽管你的回答非常简洁易读。你救了我几个小时:)在我的案例中,signtool.exe出现在“C:\Program Files(x86)\Microsoft SDK\ClickOnce\signtool\signtool.exe”中。对于任何缺少signtool.exe的人,它是。