1、缘由
公司要想做一个windows服务在检测自家软件的运行是否正常,如果不正常的话,就重新启动它,所以涉及到了windows服务启动外部程序的一个过程,但是进过测试,无法简单的用process.start(),这样的方式,主要原因是在vista和win7这样的系统下,服务是运行在session 0,而基本上应用是运行在session 1,所以即便是process.start()能够将外部程序启动起来,桌面上也是看不到的, 何况启动不起来呢~~;
2、解决方法:
在网上找到了好久,发现了这样一个第三方库,Cjwdev.WindowsApi.dll,能够用几行简单的代码从服务启动外部程序;
public static void openlocalexe(string path)
{
int _currentAquariusProcessID;
/*appStartpath设置为全路径地址*/
string appStartpath = path;
IntPtr userTokenHandle = IntPtr.Zero;
ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);
ApiDefinitions.PROCESS_INFORMATION procinfo = new ApiDefinitions.PROCESS_INFORMATION();
ApiDefinitions.STARTUPINFO startinfo = n