2013-02-27 2 views
5

У меня проблема:Запуск нового сеанса пользователя из службы

Из службы мне нужно запустить приложение в сеансе пользователя. Ни один пользователь не регистрируется на этом компьютере, поскольку он является сервером. Запущенный приложение должно иметь сеанс! = 0.

Текущее «решение»

Я использовал запланированное задание при запуске машины, что запуск задачи (в сессии 0, конечно) приложение запуска удаленного рабочего стола logon на том же компьютере: это создает сеанс пользователя> 0 и при запуске пользователя запускается конечное приложение. Это работает, но слишком сложно.

Есть ли какой-нибудь умный способ? Крайне важно, чтобы я мог повторно использовать сеанс пользователя уже, так как потенциально нет входа пользователя в систему.

MAJOR UPDATE

Ну после того, как много исследований и частичных успехов, а также благодаря некоторой SysAdmin негибкости о создании пользователя для конкретного pourpose, я решил использовать OpenGL вместо WPF для визуализации третья часть сломана в сеансе 0. Удивительно, но это заняло меньше ожиданий. Я думаю, что этот вопрос в качестве справочного материала может быть полезен другим, кто хочет попытаться отобразить Viewport3D из службы.

+1

Похоже, вы пытаетесь исправить неправильную проблему. * Почему * это запущенное приложение должно запускаться за пределами сеанса 0? –

+0

@Damien_The_Unbeliever нуждаются в видеодрайверах. Я хотел бы сказать, что, если мне удастся избежать сеанса, я буду с большим удовольствием. –

+1

Звучит ли это так, как вам нужно? http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx –

ответ

0

Я не уверен, что это сработает, но, возможно, this answer поможет в вашем случае.

Используйте класс от ответа я связываю я и при условии, следующим способом (с соответствующими значениями):

public static void EnableVideoDrivers(bool enable) 
{ 
    // every type of device has a hard-coded GUID, put here the one for 
    // video drivers 
    Guid videoGuid = new Guid("{device GUID}"); 

    // get this from the properties dialog box of this device in Device Manager 
    string instancePath = @"Device Instance Path"; 

    DeviceHelper.SetDeviceEnabled(videoGuid, instancePath, enable); 
} 

Вот список Popular Device Class GUIDs.

0

Я не уверен, что правильно понимаю ваши потребности, но, возможно, просто начать процесс с заданными учетными данными и перенаправить ввод и вывод - это то, что вам нужно. Пусковой процесс с данными учетными данными:

Process p = new Process(); 

    p.StartInfo = new ProcessStartInfo(fileName, args); 
    p.StartInfo.UserName = userName; 
    p.StartInfo.Password = pass; 

    p.Start(); 

Возможно, вам также потребуется перенаправить ввод и вывод приложения. Эта проблема хорошо описана в CodeProjecgt в этом документе artice.

+0

Было бы неплохо, если бы все было так просто. Проблема в том, что выполнение этого из службы (session id = 0) оставляет процесс появления в том же сеансе, мне нужен идентификатор сеанса <> 0. –

Смежные вопросы