У меня есть следующая простая служебная программа:
using System.Diagnostics;
using System.ServiceProcess;
namespace BasicService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
Verb = "runas",
UserName = "jdoe",
Password = "XXXXXXX".ConvertToSecureString(),
Domain = "abc.com",
UseShellExecute =false,
FileName = "notepad.exe"
};
Process.Start(processStartInfo);
}
protected override void OnStop()
{
}
}
}
И я использую ее в качестве установщика службы:
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace BasicService
{
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private readonly ServiceProcessInstaller _process;
private readonly ServiceInstaller _service;
public ProjectInstaller()
{
_process = new ServiceProcessInstaller {Account = ServiceAccount.LocalSystem};
_service = new ServiceInstaller
{
ServiceName = "BasicService",
Description = "Just a testing service.",
StartType = ServiceStartMode.Automatic,
};
Installers.Add(_process);
Installers.Add(_service);
}
}
}
Если я запускаю эту службу без глагола, имя пользователя, пароль, домен и использует hellexecute указано, все работает просто денди.Как только я укажу эти значения, как показано выше, я получу следующее:
Служба не может быть запущена.System.ComponentModel.Win32Exception (0x80004005): доступ запрещен в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo) в System.Diagnostics.Process.Start () в System.Diagnostics.Process.Start.ServiceService.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.Service.ServiceService)..OnStart (String [] args) в C: \ BasicService \ BasicService \ Service1.cs: строка 24 в System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (состояние объекта)
Есть идеи?