2013-11-15 162 views
1

我正在创建一个在Windows 7上运行.exe文件的服务。由于需求复杂,必须将其作为服务来完成,因此控制台应用程序不可用。服务未运行应用程序

我已经编写了下面的代码,它完美地在控制台应用程序中运行,但是当放置在服务中时,可执行文件从不运行。

ProcessStartInfo startInfo = new ProcessStartInfo(); 

    try 
    { 
     startInfo.WorkingDirectory = "C:\\Folder"; 
     startInfo.FileName = "MyApp.exe"; 
     Process myProcess = Process.Start(startInfo);    
    } 
    catch (Exception ex) 
    { 
     using (StreamWriter writer = File.AppendText(path)) 
     { 
      writer.WriteLine(ex.Message); 
     } 
    } 
} 

没有错误被抛出,但应用程序根本没有启动。

我读过服务无法以直接的方式运行可执行文件,并根据建议修改了上述代码,但它不起作用。

编辑:我已经手动配置的服务如下:

enter image description here

+0

您是否尝试指定具体用户在服务属性对话框下运行? – Redwan

+0

我附上了一个截图,显示了我在服务窗口中配置的内容。 –

+0

因此,该用户可能没有足够的权利来运行外部应用程序。尝试在用户政治中挖掘信息或在“管理员”下运行(但这是一个糟糕的主意)。 – Redwan

回答

0

这个问题一直备受挫折的原因,我终于解决了我的问题。是的,尽管每个人都说这是不可能的,但我已经成功地为GUI应用程序提供服务。虽然有一个警告 - “修复”可以被视为利用Windows中的漏洞,因为我使用的代码基本上通过了Vista和Windows 7 UAC。本质上,应用程序始终以完全的权限执行并绕过UAC。

如果任何人有同样的问题,你需要做的是遍历PC上登录用户列表,并选择在此会话中打开UI应用程序(它具有用户的桌面),而不是在会话0服务应该在运行(并且没有桌面)。

对于一些人来说,这可能不是一个解决方案,因为它不安全。但就我而言,安全并不是主要问题,我只是需要它的工作(必须是强制服务)。

希望这可以帮助那些和我有同样问题的人。

相关问题