|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Получение PID процесса, запущенного из программы |
|
.NET - Получение PID процесса, запущенного из программы
|
Ветеран Сообщения: 5624 |
Имеется приложение на C#. В приложении есть опция - создать отчет. Отчет формируется в Excel.
//экземпляр Excel oXL = new Excel.Application(); //экземпляр книги oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); //экземпляр листа oSheet = (Excel._Worksheet)oWB.ActiveSheet; Вот и подумал, может имеет смысл при закрытии программы проверять PID процессов Excel и закрывать их принудительно? В таком случае возникает проблема с уже запущенными клиентом копиями Excel. Я думал взять список процессов Excel до запуска отчета и после listBoxBefore.Text = System.Diagnostics.Process.GetProcessesByName("Excel")[0].Id.ToString(); listBoxAfter.Text = System.Diagnostics.Process.GetProcessesByName("Excel")[0].Id.ToString(); Может есть способ сразу при активации экземпляра Excel из программы, получать его PID? Чтобы быть уверенным на 100%, что закрывается нужное приложение. |
|
------- Отправлено: 01:52, 04-12-2009 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Delirium, когда в МультиБут понадобилось определить кто запускал консоль/GUI процесс, нашёл эту тему Как узнать имя процесса-родителя, а там ссылку в посте под номер 4
![]() Тем не менее, код, переписанный с Делфи на С, не добавил, так как представил, что помимо explorer.exe и cmd.exe, программу может запускать totalcmd.exe, far.exe и т.д., что делает данный подход не надёжным. ![]() #define PSAPI_VERSION 1 #include <windows.h> #include <stdio.h> #include <Winternl.h> #include <Psapi.h> #pragma comment(lib, "Psapi.lib") int WINAPI wWinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPWSTR lpszArgs, int nWinMode) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId()); if(hProcess == INVALID_HANDLE_VALUE) return -1; HMODULE hNtDll = LoadLibrary(L"ntdll.dll"); if(hNtDll == NULL) return -1; typedef NTSTATUS (NTAPI *pfnNtQueryInformationProcess)( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength OPTIONAL ); pfnNtQueryInformationProcess gNtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, "NtQueryInformationProcess"); if(gNtQueryInformationProcess == NULL) { FreeLibrary(hNtDll); return -1; } typedef struct _PROCESS_BASIC_INFORMATION { NTSTATUS ExitStatus; PPEB PebBaseAddress; ULONG_PTR AffinityMask; LONG BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; }; _PROCESS_BASIC_INFORMATION Info ={0}; gNtQueryInformationProcess(hProcess, ProcessBasicInformation, &Info, sizeof(Info), NULL);// == NO_ERROR) CloseHandle(hProcess); hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, (DWORD)Info.InheritedFromUniqueProcessId); wchar_t szFileName[MAX_PATH] = L""; GetModuleFileNameEx(hProcess, NULL, szFileName, MAX_PATH); CloseHandle(hProcess); MessageBox(NULL, szFileName, L"Hi", MB_ICONINFORMATION); if(hNtDll != NULL) FreeLibrary(hNtDll); return 0; } Не писал под .NET в Excel, так что не знаю нюансов, но разве при запуске второго экземпляра Excel не создаёт новой вкладке в своём окне? Или с рапортами выделяется отдельный поток и всё? |
Отправлено: 20:01, 05-12-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
|
|
------- Отправлено: 02:17, 07-12-2009 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Помогите с написанием bat файла для проверки запущенного процесса. | Stranger404 | Скриптовые языки администрирования Windows | 17 | 17-08-2020 22:50 | |
Проверка запущенного процесса | Anarasius | AutoIt | 2 | 25-06-2014 11:39 | |
Разное - [решено] Что такое PID процесса ? | S-400 | Microsoft Windows 2000/XP | 3 | 09-05-2009 14:48 | |
Java - Отслеживание состояния запущенного процесса | EvgeniyQQQ | Программирование и базы данных | 15 | 02-10-2007 13:20 | |
А можно для уже запущенного процесса сменить user-a ? | ukms | Программирование и базы данных | 6 | 23-10-2002 13:51 |
|