C++ C++;如果在Windows 8上,请请求管理权限

C++ C++;如果在Windows 8上,请请求管理权限,c++,windows,windows-8,privileges,admin-rights,C++,Windows,Windows 8,Privileges,Admin Rights,简单问题:如果您在Windows 8上运行应用程序,是否有办法只请求管理权限 到目前为止,我看到的唯一方法是调用一个外部程序来终止并以管理员权限重新打开它(如果它在Windows 8上)。例如,外部程序指的是vb脚本。 但这种方法确实不安全,而且有点脏 我这么问是因为在Windows8上有很多小事情,没有管理员权限你就不能再做了。就像在program files文件夹中写入/删除文件以及访问/操作具有管理员权限的其他进程一样。据我所知,没有提升令牌的进程无法提升。它可以使用带有“runas”动词

简单问题:如果您在Windows 8上运行应用程序,是否有办法只请求管理权限

到目前为止,我看到的唯一方法是调用一个外部程序来终止并以管理员权限重新打开它(如果它在Windows 8上)。例如,外部程序指的是vb脚本。
但这种方法确实不安全,而且有点脏


我这么问是因为在Windows8上有很多小事情,没有管理员权限你就不能再做了。就像在program files文件夹中写入/删除文件以及访问/操作具有管理员权限的其他进程一样。

据我所知,没有提升令牌的进程无法提升。它可以使用带有“runas”动词的ShellExecute启动一个新进程(请参阅)。当然会显示UAC提示。如果您确实想检测Windows 8,并且只在那里显示UAC提示符,而不是在Windows 7上,则可以在主应用程序上编写一个包装器,在Win8上使用UAC提示符启动主应用程序。

这是在引入UAC时在Windows Vista中启动的。(它实际上是在XP中启动的,当时不是以超级用户或管理员的身份运行,但默认情况下是超级用户,因此没有太大影响。)这里有很多关于UAC和特权的答案;你应该能找到他们。(同时搜索“Windows清单”,这是自XP以来所有Windows操作系统版本的解决方案。例如,请参阅问题右侧相关列表中的,以及第二个和第五个。)我在Windows 8上开始遇到的问题。如果您希望始终请求管理权限,则清单无疑是一种方法,但我的问题是,如果我们在Windows 8上,则仅请求这些权限。您给出的具体示例对于Windows 8并不陌生。他们总是需要管理员权限。我可以重复一下,访问问题是从Windows 8开始的。在Windows7上,一切正常。当我以管理员身份手动启动一个项目时,它只在Windows 8上运行。在Windows 7上,它正常工作。如果您能确定在Windows 8上不工作的特定内容,也许我们可以提供更多帮助。+1,但不需要单独的包装器。如果应用程序检测到需要,它总是可以重新启动自己,不需要外部应用程序、vbscript或包装器。我真的很想看看你是如何做到的。有什么例子吗?Electron的答案已经包含了到示例代码的链接。只需将自己的可执行文件替换为
notepad.exe
。您可以使用
GetModuleFileName
查找可执行文件的位置。