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比較偏向於圖形介面,但是有時候我們可能也只是看下日誌或者傳輸一下檔案,那麼遠端桌面顯得有點大炮打蚊子的感覺,所以這裡記錄一下如何開啟...