以下问题只出现在Windows 10上,Windows 7上不会出现。
我有一个应用程序(C++,Visual Studio 2017),它需要管理员权限(链接器上的 flag/level='requireAdministrator'
)。在这里,我尝试获取环境变量 RESOURCES:
示例
int main() {
const char* buf;
buf = getenv("RESOURCES");
if (buf)
cout << buf << endl;
else
cout << 0 << endl;
system("pause");
return 0;
}
在 Windows 7 上,我使用了以下批处理文件,但没有以管理员身份运行它:
@echo off
set WORKING_DIR=%~dp0
set APP=%WORKING_DIR%\ConsoleApplicationTest.exe
set RESOURCES=%WORKING_DIR%\resources
start "" "%APP%"
结果 - 在 Windows 10 上,C++ 代码中的 RESOURCES 变量为空,在 Windows 7 上 - 资源的正确路径。 Windows 10 上唯一的解决方案是始终以管理员身份启动批处理文件吗?
最佳答案
您的问题是,如果运行批处理文件的 cmd
实例未提升,但您的可执行文件需要提升,则 Application Information Service/UAC
进程将处理新进程创建并且不会传输 cmd
环境 block (更多 here 和 here )。
因此,在不更改程序代码的情况下,您只有两个选择:以管理员身份执行 cmd
实例或将变量设置为系统环境变量(是的,这需要提升进程)
关于c++ - 如果我们启动管理员需要的应用程序,则不会分配 .bat 中定义的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53407549/