本来在Windows 7 上面不行,后面在网站查了资料,说Windows7把那个功能禁用了,后面解决后,放到服务器上就启动不了,但是在Windows7上可以。
服务里面的属性 设置 界面交互式 设置过了,没有效果。
Windows服务代码:
// Onstart 方法里面的全部代码 这段代码 就是可以Window7 上启动外部程序的代码,放入服务器就不行了(2003,2008)
try {
appStartPath = @"D:\source\166\课程中心3.0\Tools\ACCService\ACCService\ACCService\bin\Debug\ACCService.exe"; //外部程序路径 IntPtr userTokenHandle = IntPtr.Zero; ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);
ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION(); ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO(); startInfo.cb = (uint)Marshal.SizeOf(startInfo);
ApiDefinitions.CreateProcessAsUser( userTokenHandle, appStartPath, "", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out procInfo);
if (userTokenHandle != IntPtr.Zero) ApiDefinitions.CloseHandle(userTokenHandle);
_currentAquariusProcessId = (int)procInfo.dwProcessId; } catch (Exception ex) { // MessageBox.Show(string.Format("Start Application failed, its path is {0} ,exception: {1}", appStartPath, ex.Message)); } }