Отказ от ответственности: это часть требований программы, поэтому она не предназначена для чего-то плохого.Не стесняйтесь указывать на любое неправильное использование, если вы обнаружите один.Я новичок в C ++.
По сути, я пытаюсь перезапустить Outlook.exe
в Windows, используя C ++.
И этот код я использовал для перезапуска Outlook.
#include <TlHelp32.h>
void RestartOutlook() {
PROCESSENTRY32 Pc = { sizeof(PROCESSENTRY32) };
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
MODULEENTRY32 Mo = {sizeof (MODULEENTRY32) };
if(Process32First(hSnapshot, &Pc)){
do{
if(!_stricmp(Pc.szExeFile, "outlook.exe")) {
DWORD pid = Pc.th32ProcessID;
HANDLE hModuleSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
//kill outlook
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
DWORD fdwExit = 0;
GetExitCodeProcess(process, &fdwExit);
TerminateProcess(process, fdwExit);
char * path;
if (Module32First(hModuleSnapshot, &Mo)) {
path = Mo.szExePath;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof (si);
CreateProcess(path, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi);
}
}
}while(Process32Next(hSnapshot, &Pc));
}
}
Самое смешное, что этот кусок кода прекрасно работает в Windows 7. В Windows XP (SP3) у меня дублируется Outlook.GetLastError
дает мне 6: ERROR_INVALID_HANDLE
.Я действительно невежествен после нескольких часов исследований.
Есть идеи?
В любом случае, C ++ - это не моя сфера деятельности.Я делаю паутину:)
А приведенный выше код представляет собой смесь следующих источников:
1: http://www.istorya.net/forums/programming/107435-how-can-i-kill-a-process-using-c.html
2: http://code.activestate.com/recipes/576362-list-system-process-and-process-information-on-win/
Среда: Windows 7, Windows XP, VS2010, Outlook 2003, Outlook 2007, Outlook 2010