当用户已经是pipe理员时,通过C ++激活pipe理员

那么我注意到,在Windows 7上,有时甚至当你是一个pipe理员,你不能做很多事情,可能是某种错误,我的应用程序我检查用户是否是pipe理员在启动程序之前,因为我的程序创build文件被保护的文件夹默认为根文件夹(C:),如果您不是Windows 7的pipe理员,则只能在那里创build文件夹。

所以,如果我右键单击我的应用程序,然后“以pipe理员身份运行”,它只是正常工作。 有没有办法使我的应用程序自动以pipe理员身份运行? 我想能够使一行代码,如: ActivateAdministrator(); 并完全可用于代码,因为我改变属性,用ifstream创build文件。

Solutions Collecting From Web of "当用户已经是pipe理员时,通过C ++激活pipe理员"

您可以将清单添加到可执行文件中 – http://msdn.microsoft.com/zh-cn/library/bb756929.aspx

如果用户在UAC打开且不是管理员的系统上运行,则包含requestedExecutionLevel level="requireAdministrator"的清单将在您的应用程序能够以管理权限运行之前生成管理员密码的提示。 (需要管理员权限意味着不正确的密码或没有密码将阻止它完全运行)

如果他们是UAC打开的管理员,那么相同的清单将导致“是/否”提示,询问您的应用程序是否应该被授予管理权限。

当然,真正的问题是无论你的应用程序在做什么需要管理权限都需要检查。

大多数情况下,普通用户级应用程序并不需要特权。 这确实是一个应用程序设计问题 – 您的应用程序在做什么需要管理员权限? 真的有必要吗? 例如,如果您正在修改文件,那么为什么这些文件位于文件系统的受保护区域而不是用户的配置文件空间?

您可能会发现有关Priviliges的Windows开发人员中心文章 ,特别是在C ++中启用和禁用特权 。

尽管这是用C#编写的,但是对于我来说,这可能更容易些,我不知道。 我做的是检测如果以管理员身份运行,或者没有提升特权? ,如果不是在请求管理访问时重新运行当前进程(如果启用了UAC,则会弹出当前用户并询问程序是否可以使用管理权限运行)。

然后一些简单的(但是C#代码)看起来像:

 // UAC is a class from the previous link on SO if (UAC.IsCurrentProcessElevated()) { string currentProcess = Assembly.GetEntryAssembly().Location; string arguments = string.Join(" ", this._Args.ToArray()); ProcessStartInfo startInfo = new ProcessStartInfo(currentProcess, arguments); startInfo.UseShellExecute = true; startInfo.Verb = "runas"; Process.Start(startInfo); } 

未升级的流程将会相当新的一个开始,要求管理权限。