Вот мой код:
#define tcalloc(nCharacters) (TCHAR*)calloc(nCharacters,sizeof(TCHAR))
TCHAR *sCmdParam = tcalloc(1024);
StringCchCopy(sCmdParam, 1024,
L"wmic.exe "
"/NAMESPACE:\\\\root\\Microsoft\\SqlServer\\ComputerManagement14 PATH ServerNetworkProtocol WHERE ProtocolName='Tcp' CALL SetEnable");
DWORD dwPID = 0;
DWORD dwExit = ExecCmdAndWait(sCmdParam, 120, SW_HIDE, &dwPID);
_tprintf(L"%u\n",dwExit);
free(sCmdParam);
_getchar_nolock();
return 0;
(ExecCmdAndWait просто вызывает CreateProcess)
Если я запускаю команду wmic из командной строки в командной строке администратора, она работает правильно.
Чем отличается запуск от скомпилированной программы?
Он работает под администратором домена.
Я также попытался запустить его с «cmd.exe / c» перед «wmic», но это дало тот же результат.
Я также предварительно пробовал 'chdir' для c: \ windows \ syswow64 \ wbem и c: \ windows \ system32 \ wbem, оба не работали.
И я попытался позвонить из быстрой программы VB6, которая дала тот же результат.