|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Надо заменить некоторые системные файлы (dll). (очень прошу не обсуждать здесь плохо это, хорошо ли, зачем и т.д. есть такое слово НАДО). С парочкой файлов у меня спотык следующего рода. Владельца взял, права на удаление/замену взял. Но недостаточно. Copying... Failed. Error 57 (Процесс не может получить доступ к файлу "C:\WINDOWS\system32\blablabla.dll", так как этот файл используется другим процессом.) Ручками проблема лечится так: 1) Process Explorer Find -> Find Handle or DLL Handle or DLL substring: blablabla.dll (здесь можно ввести полный путь C:\WINDOWS\system32\blablabla.dll) Находит типа Process=RuntimeBroker.exe PID=9876 2) Alt+CTRL+Del -> Диспетчер задач ->Подробности Находим этот самый RuntimeBroker.exe PID=9876 (выполняется от имени "тек. пользователя") и делаем ему "Снять задачу". Ну т.е. мои два вопроса Как программно 1) найти удерживающий PID (ну или список кто использует) 2) грохнуть тот процесс P.S. Делать отложенную "замену при перезагрузке", м.б. вариант но еще не факт что получится, и главное не очень хочется. В общем, считаю, под свою ответственность, что описанная ручная процедура подойдет. Конкретно RuntimeBroker.exe, я так понял, что-то связанное с телеметрией-"слежкой" в Win10, грохается он безобидно, после перезагрузки компа опять принимается за свое закусывание, ИМХО считаю грохнуть его относит. безобидно. Или м.б. кто знает имя службы этого RuntimeBroker.exe? (если это служба конечно) чтоб ее типа net stop на момент замены, потом net start. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2018, 01:19 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Вот вроде по теме нашел: How do I find out which process has a file open? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2018, 02:16 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77, наймспейс System.Diagnostics смотри классы Process и иже с ним ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2018, 01:08 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Перебираешь все процессы, в каждом все модули. https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686701(v=vs.85).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2018, 11:18 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Ну допустим PID(ы) я нашел по технологии Restart Manager . (название ф-ции неудачное, но это не конечный вариант) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
В выделенной строчке перечисляются PID-ы. (могу вывести имя (имена) блокирующего процесса и т.п.) А чем грохать PID? Ну кроме вот этого. taskkill /pid <PID> /f Restart Manager вроде сам умеет перестартовывать в каких-то случаях, но похоже не мой вариант (processInfo(i).bRestartable =false). Поэтому нужен грубый вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 02:46 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77, В чём проблема переименовать DLL, который запущен и скопировать новый? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 03:03 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Хотя может и не сработать, но попробовать можно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 03:04 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77А чем грохать PID? https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v=vs.85).aspx https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682108(v=vs.85).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 03:07 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
hVosttДмитрий77, В чём проблема переименовать DLL, который запущен и скопировать новый? Во-первых может не сработать, во-вторых мусор, его потом убирать надо. Ну насчет TerminateProcess наверно прав. Накидал вот ф-цию. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Ну здесь играться надо еще. Мне б например очень бы не хотелось грохнуть например explorer случайно. Но это проверяется. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Хотя в моем случае мешает похоже только некий RuntimeBroker.exe, которого если грохнуть не убудет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 03:34 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 07:18 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77Надо заменить некоторые системные файлы (dll). Вирусописателей давить. Советчиков тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 10:25 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
schiДмитрий77Надо заменить некоторые системные файлы (dll). Вирусописателей давить. Советчиков тоже. вы можете сразу определить вирусописателей и их советчиков, которых давить собрались? поделитесь знанием ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 10:29 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Dima TДмитрий77А чем грохать PID? TerminateProcess() Для получения хэндла OpenProcess() Дим, ну я код то о чем говоришь уже привел (на один пост выше твоего поста). Но TerminateProcess() это грубый путь. Коль я уж подписался на Restart Manager, он сам все делает. https://msdn.microsoft.com/en-us/library/windows/desktop/aa373682(v=vs.85).aspx http://community.bartdesmet.net/blogs/bart/archive/2006/11/12/Exploring-Windows-Vista_2700_s-Restart-Manager-in-C_2300_.aspx RmShutdown/RmRestart рулят Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Т.е. не надо kill_by_pid, надо RmShutdown, для надежности с флагом RmForceShutdown, которое так понимаю и делает kill_by_pid если уж культурно прикрыть не удалось. Более того RmRestart еще и перестартовывает то что "грохнули". У меня так получилось. RuntimeBroker.exe (основной мешающий элемент) без флага RmForceShutdown таки дает "сбой при закрытии", но с флагом все OK, правда RmRestart его не перезапускает, хотя и ERROR_SUCCESS. А вот если к примеру случайно запущен WinMail.exe (ради которого сыр-бор с заменами), то он как раз именно культурно закрывается, да потом еще культурно запускается. Причем сами процессы можно даже не вычислять, т.е. не морочится с маршалингом структур RM_PROCESS_INFO, достаточно того что я сделал RmRegisterResources для заменяемых файлов. Своеобразная системная автоматика-с. В общем допилю, думаю все OK будет. schiВирусописателей давить. Советчиков тоже. Уважаемый, вы как бы не в теме, зачем такие утверждения делать. Вы часом не из-тех антивирус-горе писателей баблосшибателей, которые false positives тоннами плодят без зазрения совести? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2018, 15:51 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Как-то так. Для моих целей хватает. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2018, 02:55 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
оффтоп: какой же таки VB.NET страшный ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2018, 06:27 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
hVostt, Ну ты так по мне то не суди 1) Я использую VB6 стиль деклараций и т.п. и часто использую ф-ции, которые в VB.NET пришли из VB6 (в C# их тупо нет). Привычка(с) 2) Это API, поэтому здесь вообще C-стиль в духе MSDN примеров (обработка ошибок и т.п.). P.S. Хотя при этом я не гнушаюсь вставить например копирование через .Net - ф-цию с применением Try... Catch ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2018, 14:55 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77hVostt, Ну ты так по мне то не суди 1) Я использую VB6 стиль деклараций и т.п. и часто использую ф-ции, которые в VB.NET пришли из VB6 (в C# их тупо нет). Привычка(с) 2) Это API, поэтому здесь вообще C-стиль в духе MSDN примеров (обработка ошибок и т.п.). P.S. Хотя при этом я не гнушаюсь вставить например копирование через .Net - ф-цию с применением Try... Catch Да не, мне и раньше доводилось сталкиваться с VB.NET, таки он страшный сам по себе :) И всёж если бы ты перешёл на C#, тебе бы всяко легче было бы, вот в разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2018, 15:55 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
hVosttДа не, мне и раньше доводилось сталкиваться с VB.NET, таки он страшный сам по себе :) И всёж если бы ты перешёл на C#, тебе бы всяко легче было бы, вот в разы. Ну, тебе ж с VB6 не "доводилось сталкиваться", я так думаю. Мне и так достаточно легко, потому что я прошел через VB6, а это определенная "школа" и навыки. ИМХО (С), для меня "страшный сам по себе" суффикс ".Net", а не приставка "VB." но нет альтернативы. Здесь каждому свое. Я вполне освоился писать в VB.Net так как мне надо и как у меня хорошо получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 00:43 |
|
Узнать PID процесса, который не дает заменить dll и грохнуть этот процесс.
|
|||
---|---|---|---|
#18+
Дмитрий77Ну, тебе ж с VB6 не "доводилось сталкиваться", я так думаю. Я на VB6 делал такое, что мне сейчас даже в страшном сне не приснится. Например, писал полноценную систему управления запасами МТР на MS Access для филиалов региона со скриптами на VB6 объёмом около 100к строк. С сервером на ASP.NET 2.0, консолидаций, выгрузками, импортом/экспортом в SAP R/3 и 1C. Давно это было. Просто не вижу высокой корреляцией между языком программирования и решением задач. Если можешь решать эффективно задачи на VB6, точно также сможешь и на другом языке. Просто язык надо выбирать исходя из потребностей и перспективы, а не на основе только одного личного опыта. Например, на C# тебе бы гораздо легче было бы находить информацию и ответы на вопросы. Опять же с ВинАПИ комфортнее работать из C#, чем из VB.NET. Когда-то VB.NET мог похвастаться лучшей поддержкой работы с COM, ровно до момента, как в C# добавили dynamic. В общем, ИМХО. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 17:29 |
|
|
start [/forum/topic.php?fid=20&msg=39630630&tid=1399413]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 172ms |
0 / 0 |