.NET 8中SystemIdentification.GetSystemIdForPublisher跨项目返回相同ID的问题咨询
.NET 8 WPF中指定
SystemIdentification.GetSystemIdForPublisher发布者ID的有效方式 SystemIdentification.GetSystemIdForPublisher的发布者ID生成逻辑依赖可信的发布者身份标识,你之前尝试的配置未生效,大概率是因为未满足.NET 8对发布者身份的验证要求,以下是几种可靠的配置方式:
1. 完整的Authenticode代码签名
仅给程序集加强名称签名无法触发发布者ID的区分,必须使用Authenticode代码签名证书(自签名证书可用于本地测试)对最终的可执行文件或应用包签名:
- 生成自签名证书(PowerShell命令):
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Your Unique Publisher Name" -CertStoreLocation Cert:\CurrentUser\My - 签名WPF应用的输出文件(使用
signtool.exe):
签名完成后,同一设备上使用不同证书签名的应用会返回不同的发布者ID。signtool sign /f "你的证书路径.pfx" /p "证书密码" "bin\Release\net8.0-windows\YourWpfApp.exe"
2. MSIX打包配置发布者身份
如果你的WPF应用采用MSIX打包,发布者ID会直接取自MSIX包的身份配置:
- 在
Package.appxmanifest文件中,修改Identity节点的Publisher属性为唯一值:<Identity Name="YourWpfApp" Publisher="CN=Your Distinct Publisher" Version="1.0.0.0" /> - 打包时使用与
Publisher匹配的证书签名MSIX包,不同发布者的MSIX应用会生成不同的ID。
3. 注意.NET 8的未签名应用行为
对于未签名、未打包的桌面应用,.NET 8不会将AssemblyCompany或csproj的Company属性作为发布者身份的依据(这些属性无篡改防护),此时GetSystemIdForPublisher会返回基于设备的固定值,导致不同应用得到相同ID。必须通过签名或MSIX打包提供可信的发布者标识。
验证代码
可以用以下代码输出ID字符串,方便对比测试:
var systemId = SystemIdentification.GetSystemIdForPublisher(); if (systemId is not null) { var idHex = BitConverter.ToString(systemId.Id).Replace("-", string.Empty); MessageBox.Show($"发布者ID: {idHex}"); }
内容的提问来源于stack exchange,提问作者Abanoub Zak
相关产品推荐
相关产品推荐

