Windows Service 方式監控 執行程式 |
答題得分者是:RootKit
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
請問各位大大,
我用TService 去做一個監控 a.exe 是否有被執行的作用, 但無反應. 請教各位能否指導..提供方向. [code cpp] //--------------------------------------------------------------------------- void __fastcall TnxnAgent::ServiceExecute(TService *Sender) { while(!Terminated) { AppHandle = FindWindow("TApplication","TEST"); if(AppHandle == NULL) { ShellExecute(NULL,NULL,"D:\App.exe",NULL,NULL,SW_SHOW); } Sleep(1000); ServiceThread->ProcessRequests(false); } } //--------------------------------------------------------------------------- void __fastcall TnxnAgent::ServiceStart(TService *Sender, bool &Started) { Started = true; } //--------------------------------------------------------------------------- [/code] |
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
如果你的作業系統是Vista 有可能會有這樣的情況,在 Vista 之前的 Windows 版本你的方法是可行的,
由於 Vista 有 Session 0 Isolation 的關係,所以登入的 Session 會看不到在 Session 0 執行 test.exe 的畫面,解決的方式就是將你的 test.exe 丟到登入的 Session 去執行。 以下 API 你查一下,依列的順序使用就可以解決你的問題。 WTSGetActiveConsoleSessionId WTSQueryUserToken SetTokenInformation CreateEnvironmentBlock CreateProcessAsUser ===================引 用 kenbcb 文 章=================== 我查工作管理員, 看到service 有把 程式(test.exe)執行, 但沒畫面出來. 而其使用者名稱欄位是"SYSTEM" 若直接點選 程式(text.exe), 有畫面出來, 而其使用者名稱欄位是 登入的帳號 請問我那兒的操作錯誤呢 ===================引 用 harpist 文 章=================== [code cpp]AppHandle = FindWindow(NULL,"TEST"); [/code]
------
~§~迷時師渡,悟了自渡~§~ |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
是xp 的系統...所以不知那一點出錯了.
===================引 用 harpist 文 章=================== 如果你的作業系統是Vista 有可能會有這樣的情況,在 Vista 之前的 Windows 版本你的方法是可行的, 由於 Vista 有 Session 0 Isolation 的關係,所以登入的 Session 會看不到在 Session 0 執行 test.exe 的畫面,解決的方式就是將你的 test.exe 丟到登入的 Session 去執行。 以下 API 你查一下,依列的順序使用就可以解決你的問題。 WTSGetActiveConsoleSessionId WTSQueryUserToken SetTokenInformation CreateEnvironmentBlock CreateProcessAsUser ===================引 用 kenbcb 文 章=================== 我查工作管理員, 看到service 有把 程式(test.exe)執行, 但沒畫面出來. 而其使用者名稱欄位是"SYSTEM" 若直接點選 程式(text.exe), 有畫面出來, 而其使用者名稱欄位是 登入的帳號 請問我那兒的操作錯誤呢 ===================引 用 harpist 文 章=================== [code cpp]AppHandle = FindWindow(NULL,"TEST"); [/code] |
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
如果是 XP 系統,單純要顯示畫面你原來的方式應該是OK的,你所執行的程式功能為何?有存取 Registy 嗎?
寫個單純畫面什麼都不做的程式試試看,我一般都直接用 ShellExecute 就可以了,除非有要存取 Registy 就 會 GetTokenByName 然後指定到 RootKit 兄提到的 winsta0\\default 使用CreateProcessAsUser 執行。 ===================引 用 kenbcb 文 章=================== 是xp 的系統...所以不知那一點出錯了. ===================引 用 harpist 文 章=================== 如果你的作業系統是Vista 有可能會有這樣的情況,在 Vista 之前的 Windows 版本你的方法是可行的, 由於 Vista 有 Session 0 Isolation 的關係,所以登入的 Session 會看不到在 Session 0 執行 test.exe 的畫面,解決的方式就是將你的 test.exe 丟到登入的 Session 去執行。 以下 API 你查一下,依列的順序使用就可以解決你的問題。 WTSGetActiveConsoleSessionId WTSQueryUserToken SetTokenInformation CreateEnvironmentBlock CreateProcessAsUser ===================引 用 kenbcb 文 章=================== 我查工作管理員, 看到service 有把 程式(test.exe)執行, 但沒畫面出來. 而其使用者名稱欄位是"SYSTEM" 若直接點選 程式(text.exe), 有畫面出來, 而其使用者名稱欄位是 登入的帳號 請問我那兒的操作錯誤呢 ===================引 用 harpist 文 章=================== [code cpp]AppHandle = FindWindow(NULL,"TEST"); [/code]
------
~§~迷時師渡,悟了自渡~§~ |
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
只是單純畫面, 先做測試~~
我也有用 shellexecute 也有同樣問題, 才覺得有問題. ===================引 用 harpist 文 章=================== 如果是 XP 系統,單純要顯示畫面你原來的方式應該是OK的,你所執行的程式功能為何?有存取 Registy 嗎? 寫個單純畫面什麼都不做的程式試試看,我一般都直接用 ShellExecute 就可以了,除非有要存取 Registy 就 會 GetTokenByName 然後指定到 RootKit 兄提到的 winsta0\\default 使用CreateProcessAsUser 執行。 |
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |