В services.msc> Action> Properties> Log On> Разрешить сервису взаимодействовать с рабочим столом, я включил сервис для взаимодействия с рабочим столом. Что это значит точно? Как я могу использовать его для воспроизведения звука (MP3, WAV и т.д.) Из моего сервиса?
Разрешить службе взаимодействовать с рабочим столом в Windows
Ответ 1
Я собираюсь воспользоваться некоторыми свободами в попытках интерпретировать ваш вопрос по ключевым словам. В будущем, пожалуйста, уделите больше времени написанию своих вопросов, чтобы они имели смысл для другого человека, который пытается их прочитать и понять.
На вкладке "Вход" в окне свойств есть флажок для службы Windows, который называется "Разрешить службе взаимодействовать с рабочим столом". Если вы пытаетесь установить этот флажок программно, вам нужно указать флаг SERVICE_INTERACTIVE_PROCESS
при создании службы с помощью API CreateService
. (См. MSDN).
Однако обратите внимание, что начиная с Windows Vista, сервисам строго запрещено напрямую взаимодействовать с пользователем:
Важно: Сервисы не могут напрямую взаимодействовать с пользователем с Виндоус виста. Следовательно методы, упомянутые в разделе под названием Использование интерактивного сервиса не должен использоваться в новом коде.
Эта "особенность" нарушена, и общепринятая мудрость гласит, что на нее все равно не следует полагаться. Сервисы не предназначены для предоставления пользовательского интерфейса или прямого взаимодействия с пользователем. Microsoft предостерегает, что эту функцию следует избегать с первых дней существования Windows NT из-за возможных угроз безопасности. Ларри Остерман утверждает, почему это всегда плохая идея. И он не единственный.
Однако есть несколько возможных обходныхпутей, если вам абсолютно необходимы эти функции. Но я настоятельно призываю вас внимательно рассмотреть его необходимость и изучить альтернативные конструкции для вашего обслуживания.
Ответ 2
Поскольку служба не запускается в контексте пользовательского сеанса, вы создаете второе приложение для взаимодействия с сервисом.
Например, на сервере Microsoft SQL имеется средство мониторинга. Это приложение запускается в сеансе пользователя и подключается к службе, предоставляя вам информацию о том, запущена ли служба и разрешает вам останавливать и запускать службу базы данных.
Поскольку это приложение выполняется в сеансе пользователя, вы можете взаимодействовать с рабочим столом через это приложение.
Ответ 3
Вам необходимо добавить serviceinstaller и записать код ниже в коммит-событии serviceinstaller.
using System.Management;
using System.ComponentModel;
using System.Configuration.Install;
private void serviceInstaller1_Committed(object sender, InstallEventArgs e)
{
ConnectionOptions coOptions = new ConnectionOptions();
coOptions.Impersonation = ImpersonationLevel.Impersonate;
ManagementScope mgmtScope = new ManagementScope(@"root\CIMV2", coOptions);
mgmtScope.Connect();
ManagementObject wmiService;
wmiService = new ManagementObject("Win32_Service.Name='" + serviceInstaller1.ServiceName + "'");
ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");
InParam["DesktopInteract"] = true;
ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);
}
Ответ 4
wmiService = new ManagementObject("
Win32_Service.Name='" + serviceInstaller1.ServiceName + "'");
на 64-битной машине?