C++LPTSTR使用getenv调用CreateProcessAsUser时出现问题
C++ LPTSTR problem calling CreateProcessAsUser with getenv
我正在尝试调用函数CreateProcessAsUser。传递常量字符串是可以的。试图使用char*getenv(const char name(获取环境变量会给我带来问题。
如果我使用以下内容,notepad.exe将运行。
CreateProcessAsUser(hTokenDup, _T("c:\windows\notepad.exe"),
_T("c:\windows\notepad.exe"), NULL, NULL, FALSE,
dwCreationFlag, pEnvironment, NULL, &si, &pi);
但是,如果我使用以下内容,则不会运行任何内容。
CreateProcessAsUser(hTokenDup, _T("MyAppName"),
(LPTSTR)getenv("MYENVVAR"), NULL, NULL, FALSE,
dwCreationFlag, pEnvironment, NULL, &si, &pi);
我是否正确指定了getenv和(LPTSTR(?
我尝试过使用包含c:\\windows\\notepad.exe和c:\windows\notepad.exe.的用户和系统环境变量
谢谢!
第三个参数lpCommandLine
是LPTSTR
,这意味着它必须是可写内存。在调用CreateProcessAsUser
之前,需要将命令行复制到可写字符串中。
getenv
的文档说明:
使用返回的指针修改环境变量的值是不安全的。
因此,不能将其作为CreateProcessAsUser
的lpCommandLine
参数传递。
您对CreateProcessAsUser
的第一次调用似乎也是错误的,因为您也没有为lpCommandLine
传递可写内存。
当然,最直接的问题很可能是您混合了ANSI和Unicode。如果你的应用程序是Unicode,那么你需要调用_wgetenv
,或者如果你真的想从同一个源同时针对ANSI和Unicode,则需要调用_tgetenv
。但在传递之前,请确保将其复制到可写缓冲区中
最后,正如亚当所评论的,每次你写演员阵容时,都有很大的可能性是你犯了错误。
getenv((将始终返回一个char*,无论您的应用程序设置为使用什么字符集。请尝试使用_tgetenv((,因为它会根据需要在char*和wchar_t*之间进行调整。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题