У меня есть служба, которая запускает процесс приложения WPF, когда пользователь входит в систему.
Но по какой-то причине приложение WPF закрывается примерно через 10 минут после его создания? Завершение происходит немедленно, в журнале событий не обнаружено ни следов, ни каких-либо обычных событий закрытия/выхода, вызываемых в приложении WPF.
На самом деле, когда происходит завершение работы, Windows 7, кажется, зависает на секунду, мышь перестает отвечать на запросы, а затем после короткой задержки (выполняет жесты мыши, когда она нормализуется, но теперь отсутствует созданный процесс ). ].
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
CanHandleSessionChangeEvent = true;
}
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
if (changeDescription.Reason == SessionChangeReason.SessionLogon
&& changeDescription.SessionId > 0)
{
ApplicationLoader.PROCESS_INFORMATION procInfo;
ApplicationLoader.StartProcessAndBypassUAC(@"myapp.exe", out procInfo);
}
base.OnSessionChange(changeDescription);
}
}
//...
bool result = CreateProcessAsUser(hUserTokenDup, // client's access token
null, // file to execute
applicationName, // command line
ref sa, // pointer to process SECURITY_ATTRIBUTES
ref sa, // pointer to thread SECURITY_ATTRIBUTES
false, // handles are not inheritable
dwCreationFlags, // creation flags
IntPtr.Zero, // pointer to new environment block
null, // name of current directory
ref si, // pointer to STARTUPINFO structure
out procInfo // receives information about new process
);
SYSTEM
из winlogon.exe
(, но который работает в сеансе 1+ ), потому что если вы дублируете токен конкретного пользователя вместо (, например изexplorer.exe
)то вылетов больше нет!explorer.exe
вместо winlogon.exe
, хотя использование explorer.exe
избавляет от завершения Я теряю административные привилегии, что у меня не работает
, есть идеи, как заставить его работать с токеном процесса winlogon
?
exlorer.exe
, чтобы сделать дубликат повышенным?я как-то догадываюсь, используя TokenElevation и SetTokenInformation или AdjustTokenPrivileges Windows 7
был исправлен, чтобы запретить такое олицетворение процесса?SYSTEM
), но опять же, без знания пароля/подсказок (, за исключениемCreateProcessWithLogonW
)