2009-05-19 85 views
0

我遇到了一些問題。在Windows上顯示隱藏進程?

與我之前關於Slipstreamed SP3 vs. patched SP3的問題相關,我們得出結論,有一個Internet Explorer進程正在啓動,指示從本地磁盤加載一個簡單的.html文件,其中包含javascript,它打開其餘的更大的聊天/會議系統。 Internet Explorer從Lotus Notes客戶端啓動。

不幸的是,我們只能看到在任務管理器中彈出的IExplore.exe進程,幾秒鐘後又消失了。

如果我們嘗試打開我們在磁盤上找到的本地.html文件,它會向我們提供頂部的信息欄,告訴我們它禁用了活動內容。然而,這並不是真正的問題。我們有另一臺機器具有相同的設置,但一切正常,手動加載.html文件也給我們提供了相同的錯誤。

但是,當IExplore從筆記開始時,可​​能會顯示另一個錯誤消息,但由於此過程只是啓動系統的其餘部分,並且此窗口已隱藏,所以我們無法看到它,是,錯誤消息/問題。因此,我想,也許我應該嘗試創建一個等待IExplore.exe啓動的小程序,然後立即顯示窗口,以便我們可以看到錯誤消息或任何問題。至少,希望我們能夠看到這一點。

到目前爲止,除了如果我從我自己的程序啓動一個進程,並帶有一個隱藏窗口,主窗口句柄爲0,並且因此我無法顯示窗口。我期望從Lotus Notes啓動的IExplore.exe進程具有相同的問題。

我的監控程序用C#編寫,並基本上運行這個循環:

foreach (var process in Process.GetProcesses()) 
{ 
    if (process.ProcessName.ToLower() == "iexplore") 
     result.Add(process); 
} 

此拿起所有的IEXPLORE.EXE進程,窗口與否,並與IE8,我得到2個處理的第窗戶,如預期。我一遍又一遍地運行它,並處理與以前運行的差異。

然而,過程短暫有在開始一個窗口句柄0,所以我改成了這樣:

foreach (var process in Process.GetProcesses()) 
{ 
    if (process.ProcessName.ToLower() == "iexplore" && 
     process.MainWindowHandle != IntPtr.Zero) 
    { 
     result.Add(process); 
    } 
} 

,但現在它不拿起任何東西,窗口已經變得即使一個句柄(是的,process.MainWindowHandle在窗口顯示後確實具有非零的句柄值,但是在窗口從不顯示的情況下,它保持爲0.)

所以,問題是:有沒有什麼辦法讓我採取這個隱藏的IExplore.exe進程,並指示它顯示自己,當它沒有窗口句柄時?我懷疑它,但也許有人能證明我錯了。

如果不是,我的備份計劃是創建一個IExplore.exe程序,它將所有命令行參數轉發到原始的參數,除了它指定要顯示該窗口。這是一個解決方案嗎?

回答

1

我不相信有什麼辦法可以強制一個沒有窗口句柄的IE窗口爲自己分配一個窗口句柄(或者使用以前分配的窗口句柄)並顯示它自己。

至於你的備份方法:我認爲這會工作,但你在危險的領土上工作。我實際上建議編寫你的shim來記錄每次調用iexplore.exe及其中的所有內容,並用它來表徵你的問題;只有在徹底表徵完全良性日誌的問題後,纔會建議修改參數以強制iexplore.exe顯示一個窗口。

+0

這完全是一個調試工具,沒有辦法像這樣糟糕的解決方案將投入生產,所以現在我們只是要去墊片選項,看看是否有幫助。 – 2009-05-19 18:29:34