民间,
我不确定如何解决的大问题。似乎Win7 SP1破坏了我的应用程序。我的场景曾经有效!
我有一个Win C#.NET 4.0应用程序,其中包含通过app.manifest行请求管理权限的清单:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
我也通过以下代码行在我的应用程序中启动一个新线程:
Process certMaker = new Process();
certMaker.StartInfo.FileName = makeCertExe;
certMaker.StartInfo.UseShellExecute = false;
certMaker.StartInfo.RedirectStandardOutput = true;
certMaker.Start();
certMaker.WaitForExit();
这曾经没有问题,但现在它不再在提升的权限下运行。可以肯定的是,我用以下方法修饰了方法:
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
但我只得到“请求主要许可失败”错误。
有任何帮助吗? SP1中发生了哪些变化可能导致这种情况?由于成本高昂,我们的申请尚未签署。
我尝试在任何级别关闭或打开UAC,我试图设置从XP到Win7的兼容模式设置,没有。
我为操作系统中的各种安全故障启用了完整的审核报告。以下是我认为每次尝试运行命令时都会得到的信息:
A handle to an object was requested.
Subject:
Security ID: LOCAL SERVICE
Account Name: LOCAL SERVICE
Account Domain: NT AUTHORITY
Logon ID: 0x3e5
Object:
Object Server: PlugPlayManager
Object Type: Security
Object Name: PlugPlaySecurityObject
Handle ID: 0x0
Process Information:
Process ID: 0x2dc
Process Name: C:\Windows\System32\svchost.exe
Access Request Information:
Transaction ID: {00000000-0000-0000-0000-000000000000}
Accesses: Unknown specific access (bit 1)
Access Reasons: -
Access Mask: 0x2
Privileges Used for Access Check: -
Restricted SID Count: 0
谢谢!
答案 0 :(得分:0)
为什么UseShellExecute=false
?如果你使它true
,它将使用你的清单。我知道你说它曾经工作,但根据我的经验,你必须使用ShellExecute来考虑你的清单。
这与签名无关,顺便说一句,这只是决定你是否会在其上显示带有问号的可怕橙色对话框和未知发布者,或者是一个稍微不那么可怕的公司。