我有一個使用運行時軟件包建立的應用程序。當可執行文件啓動時,會自動加載所需的軟件包(.bpl)。Windows 2008和錯誤的BPL加載
最近我們安裝了Windows 2008 R2服務器作爲終端服務使用。
我們維持在不同的路徑我們的應用程序的一些老編譯的版本,像這樣:
c:\app\version_1\common.bpl
c:\app\version_1\app.exe
c:\app\version_2\common.bpl
c:\app\version_2\app.exe
Common.bpl是一個運行包什麼APP.EXE依賴。
問題:
我開始"c:\app\version_2\app.exe"
和它加載"c:\app\version_2\common.bpl"
。 當我啓動"c:\app\version_1\app.exe"
時,它會加載WRONG bpl(從version_2開始)。
路徑"c:\app\version_2\"
不在系統搜索路徑中。
在Windows2003服務器上不會發生此問題。
我能做些什麼來解決這個問題?
謝謝!
我已經下載了進程資源管理器(微軟Sysinternals的),並檢查每個可執行文件的加載的模塊,所有這些都是正確的!
但我注意到另一個問題。在啓動第二個版本之後,發生了一個entry-not-found-error錯誤,告訴我什麼只有一個版本中存在的單元的初始化入口點無法找到。
東西很奇怪。 ProcessExplorer告訴我該進程正在加載正確的modoles,但是當它們運行時,這似乎不會發生。
似乎應用程序正在共享加載的模塊。
解決
有一個MouseHook使用FindVCLWindow,這是生成AV。
抱歉給不方便的人們,謝謝!
很難想象如何在同一個文件夾中的文件可執行過來看了 –
你確定這不是在Windows終端服務的另一個文件的虛擬化功能接管?換句話說,你認爲發生的並不是發生的事情。可以肯定的是,從version_2中刪除BPL,看看它是否仍然是錯誤的。如果是這樣,那麼你的路徑中某個OTHER目錄中的某個位置有另一個緩存/虛擬化的DLL副本。 –
@David - 當你沒有指定完整的DLL路徑名時,這是對Windows而言很差但標準的選擇。就像Excel無法打開來自不同文件夾的同名文件一樣 –