Во-первых, я наивный разработчик и не очень хорошо разбираюсь в этих кодах.
Мне отказывают в доступе в блоке кода, который пытается получить номер версии одного из приложений.
Сценарий: при запуске кода в визуальной студии проблем не возникает. Но когда установочный файл запускается на разных компьютерах и проверяется журнал, выдается Win32Exception: доступ запрещен.
( Программа запускается автоматически сразу после установки. На самом деле перед установкой этого приложения уже была установлена служба наблюдения, которая автоматически запускает приложение и возобновляет его при закрытии. Итак, я считаю, что не могу установить для RequestExecutionLevel значение requireAdmin, что может быть. отобразить диалоговое окно подтверждения и предоставить пользователю контроль над запуском приложения.)
Мне необходимо решить эту проблему. Прочитав некоторые блоги, я считаю, что это должно быть связано с отсутствием достаточных прав для получения необходимой информации. Но мне до сих пор неясно, как решить эту проблему.
Исключение из файла журнала:
[ 1,11216] 2017-04-17T11:43:53 - -------------------- Win32Exception caught --------------------
[ 1,11216] 2017-04-17T11:43:53 - Access is denied
[ 1,11216] 2017-04-17T11:43:53 - (Win32Err=0x00000005)
[ 1,11216] 2017-04-17T11:43:53 - Stack trace is :
[ 1,11216] 2017-04-17T11:43:53 - at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
at System.Diagnostics.Process.get_MainModule()
at IMPMDesktopClient.BaseIMClientDriver.GetVersion(UIntPtr windowUIntPtr)
at IMPMDesktopClient.WindowDetector.Hooks.WindowsEventArgs..ctor(Int32 eventNum, UIntPtr windowHandle, Int32 idObject, Int32 idChild, String clsName, Rectangle pos)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.CheckForWindowOfInterest(UIntPtr hWnd, UIntPtr arg)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.CheckTopWindow(UIntPtr hWnd, UIntPtr arg)
at IMPMDesktopClient.Win32Interop.EnumWindows(WndEnumCallback callback, UIntPtr param)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.DetectTheseWindowsNow(List`1 classes)
at IMPMDesktopClient.WindowDetector.WindowClassManager.OnPostRegistration()
[ 1,11216] 2017-04-17T11:43:53 - --------------------Win32Exception--------------------
Код для GetVersion():
public static Version GetVersion(UIntPtr windowUIntPtr)
{
var noOfTrials = 2;
var threadSleepPeriod = 1000;
Process imProc = null;
while (noOfTrials > 0)
{
try
{
imProc = Win32Interop.GetWindowProcess(windowUIntPtr);
Version version;
try
{
version = GetModuleVersion(imProc.MainModule);
}
catch (System.ComponentModel.Win32Exception)
{
version = GetModuleVersion(imProc.Id);
}
// If getting version fails, retry it.
if (version == null || (version.Major == 0 && version.Minor == 0))
{
// The thread will sleep for 1s after 1st trial, 3s after 2nd trial.
Thread.Sleep(threadSleepPeriod);
noOfTrials--;
threadSleepPeriod += 2000;
}
else
return version;
if (noOfTrials == 0)
{
Log.Write(...);
}
}
catch (Exception ex)
{
Log.Write(...);
}
}
return new Version();
}
Подробнее здесь: https://stackoverflow.com/questions/434 ... openproces
Win32Exception: доступ запрещен в System.Diagnostics.ProcessManager.OpenProcess() ⇐ C#
Место общения программистов C#
1720577070
Anonymous
Во-первых, я наивный разработчик и не очень хорошо разбираюсь в этих кодах.
Мне отказывают в доступе в блоке кода, который пытается получить номер версии одного из приложений.
Сценарий: при запуске кода в визуальной студии проблем не возникает. Но когда установочный файл запускается на разных компьютерах и проверяется журнал, выдается [b]Win32Exception[/b]: доступ запрещен.
( Программа запускается автоматически сразу после установки. На самом деле перед установкой этого приложения уже была установлена [b]служба наблюдения[/b], которая автоматически запускает приложение и возобновляет его при закрытии. Итак, я считаю, что не могу установить для RequestExecutionLevel значение requireAdmin, что может быть. отобразить диалоговое окно подтверждения и предоставить пользователю контроль над запуском приложения.)
Мне необходимо решить эту проблему. Прочитав некоторые блоги, я считаю, что это должно быть связано с отсутствием достаточных прав для получения необходимой информации. Но мне до сих пор неясно, как решить эту проблему.
Исключение из файла журнала:
[ 1,11216] 2017-04-17T11:43:53 - -------------------- Win32Exception caught --------------------
[ 1,11216] 2017-04-17T11:43:53 - Access is denied
[ 1,11216] 2017-04-17T11:43:53 - (Win32Err=0x00000005)
[ 1,11216] 2017-04-17T11:43:53 - Stack trace is :
[ 1,11216] 2017-04-17T11:43:53 - at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
at System.Diagnostics.Process.get_MainModule()
at IMPMDesktopClient.BaseIMClientDriver.GetVersion(UIntPtr windowUIntPtr)
at IMPMDesktopClient.WindowDetector.Hooks.WindowsEventArgs..ctor(Int32 eventNum, UIntPtr windowHandle, Int32 idObject, Int32 idChild, String clsName, Rectangle pos)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.CheckForWindowOfInterest(UIntPtr hWnd, UIntPtr arg)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.CheckTopWindow(UIntPtr hWnd, UIntPtr arg)
at IMPMDesktopClient.Win32Interop.EnumWindows(WndEnumCallback callback, UIntPtr param)
at IMPMDesktopClient.WindowDetector.Hooks.EventHooks.DetectTheseWindowsNow(List`1 classes)
at IMPMDesktopClient.WindowDetector.WindowClassManager.OnPostRegistration()
[ 1,11216] 2017-04-17T11:43:53 - --------------------Win32Exception--------------------
Код для GetVersion():
public static Version GetVersion(UIntPtr windowUIntPtr)
{
var noOfTrials = 2;
var threadSleepPeriod = 1000;
Process imProc = null;
while (noOfTrials > 0)
{
try
{
imProc = Win32Interop.GetWindowProcess(windowUIntPtr);
Version version;
try
{
version = GetModuleVersion(imProc.MainModule);
}
catch (System.ComponentModel.Win32Exception)
{
version = GetModuleVersion(imProc.Id);
}
// If getting version fails, retry it.
if (version == null || (version.Major == 0 && version.Minor == 0))
{
// The thread will sleep for 1s after 1st trial, 3s after 2nd trial.
Thread.Sleep(threadSleepPeriod);
noOfTrials--;
threadSleepPeriod += 2000;
}
else
return version;
if (noOfTrials == 0)
{
Log.Write(...);
}
}
catch (Exception ex)
{
Log.Write(...);
}
}
return new Version();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/43487133/win32exception-access-is-denied-in-system-diagnostics-processmanager-openproces[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия