在 Windows 中编译会创建一个需要超级用户模式的可执行文件

Posted

技术标签:

【中文标题】在 Windows 中编译会创建一个需要超级用户模式的可执行文件【英文标题】:compiling in windows creates an executable which requires super user mode 【发布时间】:2011-06-29 14:05:11 【问题描述】:

我只是创建了一个小应用程序,它使用了一些 windows api 调用(主要是线程相关的东西)。问题是,生成的程序需要以管理员身份运行。 cmake 脚本是这样的:

project(myproject)
cmake_minimum_required(VERSION 2.8)

add_executable(myproject main.cc myproject-client.cc)

我用这个命令运行它:

cmake -G"MSYS Makefiles" .

有什么想法吗?

【问题讨论】:

当您说“需要以管理员身份运行”时,您的意思是 Windows 正在提示您并且您不知道为什么,或者除非您故意右键单击 run-as,否则它不起作用-行政?如果是后者,请提供有关“不起作用”的详细信息。 Windows 正在提示我。此外,exe图标带有盾牌符号,表示该程序需要管理员权限。 所以你的问题是“为什么会出现盾牌”,答案很可能是“因为 exe 的名称”。那叫什么名字? 1-up.exe 我还发现编译“out directory”可以解决问题。没关系,但仍然令人困惑 澄清点:CMake 不会导致可执行文件需要管理权限。问题标题的措辞方式暗示 CMake 正在这样做……事实并非如此。 【参考方案1】:

您很可能曾经运行过该应用程序并被 Windows 告知“此应用程序可能未正确运行”,从而导致您计算机上某处的策略记住了“此应用程序需要升级”。关于此过程或如何撤消它的文档很少或根本没有,但重命名应用程序或将其构建到不同的路径通常会使您脱离政策。

您也可以尝试添加一个明确声明您不需要提升的清单,您将作为Invoker 运行。

【讨论】:

以上是关于在 Windows 中编译会创建一个需要超级用户模式的可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

在linux上安装nginx是否会创建名为nginx或nobody的用户和用户组

为啥会创建“net6.0-windows”子文件夹?

添加多个用户会创建多个角色

为啥编译包含静态嵌套类的类会创建一个名为“EnclosureClass$1”的新 .class 文件? [复制]

windows中用户与组的使用

为啥 C# 编译器在使用 LINQ 方法 Any() 时会创建私有 DisplayClass,我该如何避免它?