c++ - 如果我们启动管理员需要的应用程序,则不会分配 .bat 中定义的环境变量

标签 c++ batch-file windows-10 environment-variables

以下问题只出现在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 (更多 herehere )。

因此,在不更改程序代码的情况下,您只有两个选择:以管理员身份执行 cmd 实例或将变量设置为系统环境变量(是的,这需要提升进程)

关于c++ - 如果我们启动管理员需要的应用程序,则不会分配 .bat 中定义的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53407549/

相关文章:

c++ - 为什么 Visual Studio 在构建时无法打开我的文件进行写入?

c++ - 通过范围变量计算点周围的积分器 x 和 y 坐标

date - Robocopy 最后修改 : more accurate than a day?

c++ - 如何使用 x64 运行 cl?

windows-10 - 如何在 UWP 中添加 ListBox 项目上下文菜单

windows-10 - Cortana 命令仅在说出时有效

c++ - 如何在失败的情况下返回 const QString 引用?

c++ - 在 C++ 中如何搜索 vector 并获取元素的位置?

date - 从日期批处理文件中分离日期月份和年份

c++ - QWebview 未显示在小部件框上