2011-02-09 59 views
2

我想使用免註冊COM,這樣我就不必註冊我的COM組件了。但是,我希望能夠將com DLL放在不在或不在客戶端exe文件夾下的位置,例如.... \ lib中。我無法在服務器清單文件中執行此操作,因爲它不允許相對路徑或絕對路徑。免註冊COM - COM DLL相對於客戶端EXE的位置

有誰知道這是否有辦法?


更新: 我只找到相對路徑在XP上運行。但是,我可以使用Activation Context API在Windows Server 2008上使用絕對路徑,所以很酷。我現在的問題是,我的COM組件對託管數據庫驅動程序具有靜態依賴性,但目前沒有找到它。從我讀過的清單文件中,我希望我可以簡單地將另一個元素添加到指向此dll的COM無reg清單中,因爲它與COM dll位於相同的目錄中,但我無法使其工作。所以,總之,我有一個exe文件在一個目錄中,它使用Activation Context API來引用它找到並正確加載的另一個目錄(不是exe目錄的子目錄)中的COM清單/ dll。但我也有一個託管的數據庫驅動程序DLL在與COM DLL相同的目錄中,我想知道如何使用清單文件來加載它 - 如果可能的話。

+0

只是添加到此 - 我也嘗試使用激活上下文api以及。如上所述,我希望我的客戶端加載與client.exe不在同一目錄中的COM DLL。我試圖通過設置激活上下文中的程序集目錄來指向包含清單文件和COM DLL的目錄。結果是清單文件被正確找到,但是當它試圖加載隨附的dll時,它會查找與client.exe相關的路徑,而不是其找到清單的目錄。我錯過了什麼嗎? – HammerIp 2011-02-10 10:32:18

+0

相對路徑可以工作,即您可以將dll放在`。\ External`文件夾中,與exe相關。只需在清單中使用```。 – wqw 2011-02-11 15:41:26

回答

3

我已經通過運行帶有父目錄的exe作爲當前目錄來實現此目的。 即與此文件夾結構

  • parentdir/
  • parentdir/MYAPP/
  • parentdir/somedependency/
與 「parentdir」 作爲當前目錄

然後,您可以運行exe文件 「。\ myapp \ myapp.exe」「 」和myapp.exe.manifest可以包含對「某些依賴項」中的某些內容的引用,如

<file name=".\somedependency\somecomassembly.dll" /> 

這適用於Windows服務器