從windows服務中開啟視窗程序

2021-08-22 05:41:41 字數 1926 閱讀 2061

ivr地方業務中有乙個dba_bjldnw工具要在伺服器上執行著.一旦斷開業務即中止.需要寫乙個守護程式監視它,

一旦發現關閉了即重新啟動.

為了防止守護程式本身被使用者關閉,所以我打算做乙個windows服務在後台執行.每5分鐘列舉乙個當前系統程序,如果

沒有發現dba_bjldnw.exe則重新啟動.

問題是windows服務不是視窗程序,在這個程序中呼叫shellexecute開啟的應用程式也是在後台執行,不能顯示在當前視窗中.

後來搜尋到可以在windows服務中開啟視窗程式的方法.就是開啟使用者winsta0和desktop,取得和使用者互動的許可權後再開啟視窗程序,果然可以在windows服務中開啟視窗程序了:

hinstance hprocesssnap = null;

processentry32 pe32 = ;

dword flag = 0;

cstring theprocssname = "dba_bjldnw.exe";

//列舉程序

if(::process32first(hprocesssnap,&pe32))

}while(process32next(hprocesssnap,&pe32));

}::closehandle(hprocesssnap);

if(!flag)

hdeskcurrent = getthreaddesktop(getcurrentthreadid());

if (hdeskcurrent == null)

//開啟使用者的winsta0

hwinsta = openwindowstation("winsta0", false,

winsta_accessclipboard |

winsta_accessglobalatoms |

winsta_createdesktop |

winsta_enumdesktops |

winsta_enumerate |

winsta_exitwindows |

winsta_readattributes |

winsta_readscreen |

winsta_writeattributes);

if (hwinsta == null)

if (!setprocesswindowstation(hwinsta))

//開啟desktop

hdesk = opendesktop("default", 0, false,

desktop_createmenu |

desktop_createwindow |

desktop_enumerate |

desktop_hookcontrol |

desktop_journalplayback |

desktop_journalrecord |

desktop_readobjects |

desktop_switchdesktop |

desktop_writeobjects);

if (hdesk == null)

setthreaddesktop(hdesk);

::shellexecute(0,null,"f://ivrtj//dba//dba_bjldnw.exe",null,null,sw_maximize);

cstring msg = "dba_bjldnw.exe 被重啟動";

logevent(msg);

setprocesswindowstation(hwinstacurrent);

setthreaddesktop(hdeskcurrent);

closewindowstation(hwinsta);

closedesktop(hdesk);

}服務安裝後一定要注意,右鍵->屬性->登入,選擇 本地系統帳戶下面的允許服務與桌面互動打勾.

改良Windows的「開啟」視窗

windows xp中,很多軟體的開啟或儲存視窗左側都有幾個系統自定的資料夾。有沒有辦法把它們換成我們常用的資料夾呢?當然,利用組策略就可以改良自己的開啟視窗了。單擊 開始 執行 輸入gpedit.msc,開啟 組策略 編輯器視窗。選擇 使用者配置 管理模板 windows元件 windows資源管...

windows開啟mysql服務

windows cmd 開始 執行 輸入cmd 回車 輸入net start就可以檢視windows開啟了那些服務。net start mysql 開啟mysql服務 net stop mysql 關閉mysql服務 sc是用於與服務控制管理器和服務進行通訊的命令列程式,其語法是 sc config...

windows開啟ssh服務

我想用過linux伺服器的,應該都知道我們是利用ssh來連線我們的伺服器,然後就命令列一頓操作,但一般我們連線windows好像都是通過遠端桌面之類的,因為window比較偏向於圖形介面,但是有時候我們可能也只是看下日誌或者傳輸一下檔案,那麼遠端桌面顯得有點大炮打蚊子的感覺,所以這裡記錄一下如何開啟...