Возникла проблема с написанием интерактивного сервиса, а именно — в переключении desktop'а.
Не удается переключиться на "WinSta0\\Default" десктоп, когда на машине произвели login, а затем logout. Причем, если машина загрузилась (сервис стартует автоматически) и еще не логинились, то десктоп переключается нормально. Но что самое обидное, так это то, что SwitchDesktop возвращает 0 (завершилась неуспешно), а GetLastError почему-то тоже 0 (типа нет ошибки).
В чем может быть проблема и почему она возникает после логина на машине?
Здравствуйте MadMaks, Вы писали:
MM>Возникла проблема с написанием интерактивного сервиса, а именно — в переключении desktop'а. MM>Не удается переключиться на "WinSta0\\Default" десктоп, когда на машине произвели login, а затем logout. Причем, если машина загрузилась (сервис стартует автоматически) и еще не логинились, то десктоп переключается нормально. Но что самое обидное, так это то, что SwitchDesktop возвращает 0 (завершилась неуспешно), а GetLastError почему-то тоже 0 (типа нет ошибки). MM>В чем может быть проблема и почему она возникает после логина на машине?
1. Какой изначально десктоп у сервиса?
2. Почему надо постоянно переключаться, а не с самого начала зарегистрировать сервис как интерактивный?
Здравствуйте Alex Fedotov, Вы писали:
AF>1. Какой изначально десктоп у сервиса?
"WinSta0\\Default"
AF>2. Почему надо постоянно переключаться, а не с самого начала зарегистрировать сервис как интерактивный?
Сервис зарегестрирован как интерактивный. А переключаться нужно для запроса информации у пользователя. Понимаю, что несколько абсурдно выглядит, но так поставлена задача.
То есть, висит приглашение нажать Ctrl+Alt+Del. По сети сервис принимает задание вывести форму и прозвести ввод данных. Он должет переключиться на "Default" десктоп, чтобы вывести окно и запросить данные у пользователя (либо предоставить информацию пользователю). Далее он восстанавливает десктоп ("Winlogon").
Здравствуйте MadMaks, Вы писали:
MM>Здравствуйте Alex Fedotov, Вы писали:
AF>>1. Какой изначально десктоп у сервиса? MM>"WinSta0\\Default"
AF>>2. Почему надо постоянно переключаться, а не с самого начала зарегистрировать сервис как интерактивный? MM>Сервис зарегестрирован как интерактивный. А переключаться нужно для запроса информации у пользователя. Понимаю, что несколько абсурдно выглядит, но так поставлена задача. MM>То есть, висит приглашение нажать Ctrl+Alt+Del. По сети сервис принимает задание вывести форму и прозвести ввод данных. Он должет переключиться на "Default" десктоп, чтобы вывести окно и запросить данные у пользователя (либо предоставить информацию пользователю). Далее он восстанавливает десктоп ("Winlogon").
То есть процесс всегда остается ассоциированным с winsta0\default, он только переключает активный десктоп.
Хм, а можно взглянуть на код переключения туда и обратно? А если создать свой собственный декстоп, и переключаться на него, проблема остается?
Здравствуйте Alex Fedotov, Вы писали:
AF>То есть процесс всегда остается ассоциированным с winsta0\default, он только переключает активный десктоп. AF>Хм, а можно взглянуть на код переключения туда и обратно? А если создать свой собственный декстоп, и переключаться на него, проблема остается?
Код самый простой:
If you decide to include a user interface and common controls within your service, make sure that the service loads and initializes the Comctl32.dll file only when it needs to show the window containing the common controls. The service should close the window and completely unload the common controls library before the user logs off. The sample code in the "More Information" section of this article demonstrates how to dynamically load and initialize the Comctl32.dll file.