我正在尝试从我的安装应用程序中将证书安装到root中。如果我从管理员帐户运行,安装应用程序运行良好,但是当我从普通用户帐户运行安装程序时,我收到一条空的错误消息(而不是安全警告消息),如下所示。
我查看了Windows事件查看器,发现与此错误无关。我在将证书添加到商店之前尝试显示一个虚拟MessageBox,令我惊讶的是,我可以看到安全警告窗口正确显示。如果我删除虚拟消息框代码,我将再次收到相同的空错误消息。
代码:
private bool AddCertificate(StoreName storeName, X509Certificate2 certificate)
{
if (certificate == null)
throw new ArgumentException("Parameter cannot be null");
X509Store store = new X509Store(storeName, StoreLocation.CurrentUser);
StorePermission sp = new StorePermission(PermissionState.Unrestricted);
sp.Flags = StorePermissionFlags.OpenStore;
sp.Assert();
store.Open(OpenFlags.MaxAllowed);
MessageBox.Show("hello");
store.Add(certificate);
store.Close();
return true;
}
调查了Windows事件查看器,可以找到一个事件" Application Popup"在我收到此空错误消息时生成系统日志。
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
+ <System>
<Provider Name="Application Popup" Guid="{47BFA2B7-BD54-4FAC-B70B-29021084CA8F}" />
<EventID>26</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime="2016-05-10T10:02:57.622220900Z" />
<EventRecordID>30630</EventRecordID>
<Correlation />
<Execution ProcessID="1556" ThreadID="1296" />
<Channel>System</Channel>
<Computer>abcd.efgh.net</Computer>
<Security UserID="S-1-5-18" />
</System>
- <EventData>
<Data Name="Caption" />
<Data Name="Message" />
</EventData>
</Event>
&#13;
答案 0 :(得分:0)
一些额外的信息可能有所帮助。如果这是一个Visual Studio安装程序项目MSI安装运行Everyone(InstallAllUsers),那么它应该在自定义操作运行之前提升(您将看到一个提升提示),并且CA将与系统帐户一起运行。在这种情况下,不需要以管理员身份运行,但为当前用户(本地系统帐户)存储证书可能不是您想要的。另外,你试过StoreLocation.LocalMachine吗?
但是,如果这是一个只是我安装,那么自定义操作将不会被提升所以是的,如果需要提升并且您需要以管理员身份运行Just me install,并且当前用户将是安装用户。考虑到这两种相当不同的行为,很难弄清楚你打算做什么,或者可能导致问题,而且我们不知道你是在做每个人还是只做我。
此外,正如完整性检查一样,您是否还有其他可能存在问题的自定义操作?这是为了防止另一个自定义操作在未提升时出错。