我正在尝试创建一个应该启动进程的Windows服务。此过程需要记录到另一个帐户。
protected override void OnStart(string[] args)
{
_thread.Start();
}
private void ThreadFunction()
{
var process = new Process
{
StartInfo =
{
UserName = "User",
Password = "Pass",
UseShellExecute = false,
FileName = @"C:\Program Files\Default Company Name\ServiceProcessInstaller\ConsoleProcess.exe"
}
};
process.Start();
}
我认为这很简单,但似乎process.start和windows服务就像石油和水一样。
当我开始这个过程时,没有任何事情发生,最终我给出了一个例外: Windows无法在本地计算机上启动“AServiceProcess”服务。 错误1067:进程意外终止。
我非常感谢能得到的所有帮助,如果有什么不清楚,请告诉我。
答案 0 :(得分:0)
我建议您退后一步,查看一些有关Windows服务流程的概念信息。服务只是一个在任何登录用户之外启动和运行的进程,其概念与Unix守护进程运行的方式大致相同。你说你的代码代表你想用来启动另一个进程的服务,但你上面显示的Start方法正在启动一个名为“ServiceProcess.exe”的东西,它看起来很混乱 - 好像那个你打算运行的真实服务。
服务进程需要一组凭据,并且提供(或隐式使用)凭据(基于您的信息)不具有启动外部进程所需的权限。
除非这里有非常不寻常的要求,否则我建议您考虑 - 如果可能 - 在服务流程本身内实施您需要的操作。你可能能够使结构在上面工作,但我不确定你会发现它长期可维护。
答案 1 :(得分:0)
我最终通过使用函数'CreateUserAsProcess'来解决问题,使用WinNT50和New Credentials设置。