以下问题仅出现在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;
}
在Windows7上,我在没有以管理员身份运行的情况下使用了以下批处理文件:
@echo off
set WORKING_DIR=%~dp0
set APP=%WORKING_DIR%ConsoleApplicationTest.exe
set RESOURCES=%WORKING_DIR%resources
start "" "%APP%"
因此,在Windows 10中,c++代码中的变量为空,在Windows 7中,资源的正确路径为空。Windows 10上唯一的解决方案是始终以管理员身份启动批处理文件吗?
您的问题是,如果运行批处理文件的cmd
实例没有提升,但您的可执行文件需要提升,那么Application Information Service/UAC
进程将处理新进程的创建,并且不会传输cmd
环境块(更多信息,请参阅此处(。
因此,在不更改程序代码的情况下,您只有两个选项:以管理员身份执行cmd
实例或将变量设置为系统环境变量(是的,这需要提升进程(