原因
最近公司一些业务上的需要,需要一个winform程序一直运行。但是如果这个程序被停止或者没有开机启动,就需要启动它。
于是我就想到了用服务来监控它是否在运行。但是在调试的时候,用服务启动这个程序却一直只能启动进程,而不能看到窗体。
解决办法
在同事的帮助下,知道了原因。原来是session 0 的原因。
在网搜了一个方法,用CreateProcessAsUser这个方法来创建。
原文 http://www.cnblogs.com/gnielee/archive/2010/04/08/session0-isolation-part2.html
意思大致如下
为了方便管理,新建一个类,加上以下代码
public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
public static void ShowMessageBox(string message, string title)
{
int resp = 0;
WTSSendMessage(
WTS_CURRENT_SERVER_HANDLE,
WTSGetActiveConsoleSessionId(),
title, title.Length,
message, message.Length,
0, 0, out resp, false);
}
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int WTSGetActiveConsoleSessionId();
[DllImport("wtsapi32.dll", SetLastError = true)]
public static extern bool WTSSendMessage(
IntPtr hServer,
int SessionId,
String pTitle,
int TitleLength,
String pMes