CreateProcessAsUser 함수를 호출하려고합니다. 전달하는 상수 문자열은 괜찮습니다. char * getenv (const char name)를 사용하여 환경 변수를 선택하려고하면 문제가 발생합니다.C++ LPTSTR 문제 CreateProcessAsUser with getenv
다음을 사용하면 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) '에 대한 캐스트를 없애십시오. 컴파일러가 캐스트없이 에러 메시지를 보내면 컴파일러를 닫으려고 캐스트를 삽입하는 것은 ** 잘못된 일입니다 **. 컴파일러가 당신에게 뭔가를 말하려고합니다. 이 경우 유니 코드 응용 프로그램을 컴파일하고 유니 코드 문자열이 필요할 때 ANSI 문자열을 전달하려고합니다. ['_tgetenv'] (http://msdn.microsoft.com/en-us/) 라이브러리/tehxacec.aspx) 대신'getenv'를 사용하십시오. –
'getenv'가 성공했는지 알고 있습니까? –
@Adam Rosenfield : [ "컴파일러가 매개 변수를 변환 할 수 없으므로 일부 도움을주고 앞에 캐스트를 붙여 놓으십시오. 컴파일러가 너무 멍청합니다."] (http : /blogs.msdn.com/b/oldnewthing/archive/2011/05/06/10161590.aspx) –