C++ 什么时候应用程序绝对需要以管理员身份运行?

C++ 什么时候应用程序绝对需要以管理员身份运行?,c++,windows,elevated-privileges,C++,Windows,Elevated Privileges,我已经尝试与UAC合作一段时间了,我发现了一些事情: 启用UAC后,Startup文件夹中需要以管理员身份运行的程序(例如通过嵌入式清单)无法根据运行 启动时运行程序的另一种方法是在64位计算机中创建一个包含该应用程序路径的密钥:HKLM或HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run或HKLM或HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 另一种方法是使用任务调

我已经尝试与UAC合作一段时间了,我发现了一些事情:

  • 启用UAC后,Startup文件夹中需要以管理员身份运行的程序(例如通过嵌入式清单)无法根据运行
  • 启动时运行程序的另一种方法是在64位计算机中创建一个包含该应用程序路径的密钥:
    HKLM或HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    HKLM或HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  • 另一种方法是使用任务调度器设置“以最高权限运行”选项。这是绕过第1点所述问题的唯一方法
  • 我有Linux背景,对所有这些与管理权限相关的问题一无所知。如果有人能列出绝对需要管理员权限的场景,那将是非常有帮助的

    我这样问是因为当我开发一些应用程序时,我在实现过程中不断遇到一些问题,主要是因为我的应用程序需要管理员权限,而它不应该这样做


    如果我在设计时知道所有可能需要管理员权限的场景,我可能会为我的所有应用程序设计一个公共服务来处理所有管理员任务(我认为服务是Windows完成类似任务的方式)。

    确实没有需要提升的场景或API函数调用列表。您最好的选择可能是关注哪些API调用需要提升。这样做的原因是,只有将某些值传递给函数时,才可能需要它。例如,
    CreateFile
    可以在您的主目录中创建一个不带提升的文件,但在C:\Windows中创建文件时需要它。如果目录是通过用户输入提供的,那么知道是否需要提升的唯一方法就是在调用失败时检查错误代码。如果需要提升,函数会将错误状态设置为
    错误\u访问\u拒绝
    ,并返回一个指示失败的值。

    唯一需要管理员权限的情况是调用需要提升权限的函数。@CaptainObvlious,你能给我一些这样函数的例子吗?这是一个场景的例子。另外,如果没有列表,您不认为如果我们在这个线程中创建一个列表,对所有Windows程序员都会非常有帮助吗?它肯定会帮助人们设计应用程序。它可能会有帮助,但它几乎不可能维护,而且不适合这样做。该列表将包括数百(如果不是数千)个API调用,每个调用都有几个变体以涵盖所有可能性。您应该假设所有Windows API调用都可以返回
    错误\u访问\u拒绝
    ,并进行适当处理。不,不,我说的是场景,不是API调用。在您自己的回答中,您提到
    CreateFile(C:\Windows中的某些东西)
    需要提升。这是一种情况。我相信不会有太多的场景。@AnishRam:在这种情况下,场景的列表很简单:只要您更改了影响其他用户的内容。@AnishRam可能需要提升的每个调用都需要针对每个参数值组合进行记录。最终会出现大量API调用的场景,同样的麻烦也会出现。考虑到尺寸和可维护性问题,它不适合这样做。