通过Windows Service启动外部程序

在WinXP和Win2003环境中,安装服务后,右键单击服务“属性”-“登录”选项卡-选择“本地系统帐户”并勾选“允许服务与桌面交互”即可.

在Win7环境中,由于微软加强了权限管理,将此功能禁用,需要引用第三方dll

Cjwdev.WindowsApi.dll

Cjwdev.WindowsApi.xml

dll下载链接:http://pan.baidu.com/share/link?shareid=159544&uk=3288736938

        private void StartApp(string strAppPath)
        { 
            try 
           {
               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, 
                   strAppPath, 
                 “”, 
                   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(ex.Message); 
           }
        }

 

posted @ 2013-01-07 10:45  玉门关内客  阅读(4353)  评论(2)    收藏  举报