【发布时间】:2011-07-01 21:55:10
【问题描述】:
我正在尝试调用函数 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 的用户和系统环境变量。
谢谢!
【问题讨论】:
-
摆脱对
(LPTSTR)的强制转换——如果编译器在没有强制转换的情况下给你一个错误消息,那么插入一个强制转换来关闭编译器是错误的 。编译器试图告诉你一些事情。在这种情况下,您正在编译一个 Unicode 应用程序,并且在需要 Unicode 字符串时尝试传递一个 ANSI 字符串——使用_tgetenv而不是getenv。 -
你知道
getenv成功了吗? -
使用 _wgetenv() 解决您的问题,下划线-t 是过时的。最好的办法是将第二个参数设置为 NULL,将第三个参数设置为 exepath + " " + 参数。这确保了一些依赖 argv[0] 作为程序路径的 C 程序不会失败。 CreateProcess 是火箭科学。
标签: c++ createprocessasuser getenv lptstr