回答
您可能還想嘗試爲您的項目設置Reg-Free COM。有一個名爲Make My Manifest的免費軟件可以幫你做大部分工作
編輯 MMM網站已關閉。我看到here,作者與他們的託管有問題,並提供了另一個位置讓我的清單 - download it here。
發現它自己:
Windows不會看在app目錄第一: 如果啓用SafeDllSearchMode,搜索順序如下:
- 從其中加載應用程序的目錄。
- 系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。
- 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。
- Windows目錄。使用GetWindowsDirectory函數獲取此目錄的路徑。
- 當前目錄。
- PATH環境變量中列出的目錄。請注意,這不包括App Paths註冊表項指定的每個應用程序路徑。計算DLL搜索路徑時不使用App Paths鍵。
如果SafeDllSearchMode被禁用,檢索順序如下:
1.從其中加載應用程序的目錄。 2.當前目錄。 3.系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。 4. 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。 5. Windows目錄。使用GetWindowsDirectory函數獲取此目錄的路徑。 6. PATH環境變量中列出的目錄。請注意,這不包括App Paths註冊表項指定的每個應用程序路徑。計算DLL搜索路徑時不使用App Paths鍵。
根據:http://msdn.microsoft.com/en-us/library/ms682586.aspx
但是你可以重定向它查找.dll文件使用清單的:
http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx
它可以是有點令人困惑,因爲每個版本的Windows,規則更改。較舊版本的Windows在當前目錄之前搜索路徑。
沒有體現一個簡單的辦法:
如果你的可執行文件是A.EXE
,在名爲A.EXE.local
同一目錄中添加一個(0字節,空)文件 - 舊版本的Windows,這把app目錄提前搜索順序中的路徑。
Clay Nichol對搜索順序的回答並不完全正確。該搜索順序僅適用於非COM組件。即只有一些DLL,而不是OCX。如果你註冊你的COM對象,它們將從它們註冊的目錄中被使用,而不管本地目錄中是什麼,,除非你使用無reg或者.local文件的。
編輯:
MakeMyManifest很好口語的,因爲用於創建VB6的項目清單自動工具,還沒有嘗試過自己。 DirectCOM也有粉絲,再次我沒有嘗試過。
編輯 MMM網站已關閉。我看到here,作者與他們的託管有問題,並提供了另一個位置讓我的清單 - download it here。
有一種半自動技術來生成無reg的COM表單。您可以使用Visual Studio 2008創建清單(可以使用免費版本,如Visual Basic Express Edition)。然後手動進行一些編輯,使清單適合在VB6中使用。有關分步說明,請參閱本MSDN文章的this section - 忽略有關ClickOnce的文章的其餘部分。
將組件庫放置在EXE文件夾(帶或不帶.local文件)中也可能對目標機器的衛生有害。
如果VB6程序以前沒有註冊過,它們將通過背後的自注冊入口點在這裏註冊組件。然後,如果應用程序被移動或刪除,則會導致用戶的重新註冊失敗 - 對於隨後使用某些相同組件進行安裝的應用程序可能是致命的。對於特定於應用程序的組件,這可能是很好的,也就是說,您自己的DLL或OCX將會被其他應用程序需要的永不。
.local技巧並不適用於VB6程序,如果使用它,安裝程序需要注意並正確安裝並註冊組件,如果它們尚未安裝在機器上。這是爲了解決單個機器上的DLL版本兼容性問題而不是部署策略的手動攻擊。
上移到SxS應用程序和程序集清單(免註冊COM和更多)以獲得更好的解決方案。 DLL/COM重定向(.local)是一個很好的嘗試,但它有許多疣。
- 1. 如何使用VB6找到應用程序所在的目錄?
- 2. 如何強制VB6程序在指定文件夾中使用dll?
- 3. 如何在VB6應用程序中調用.NET創建的DLL?
- 4. 如何在VB6上使用IE ocx
- 5. 強制我的應用程序使用特定版本的DLL
- 6. 在delphi中使用dll ocx
- 7. 無法使用VB6程序創建對象VB6 COM DLL使用VB6程序
- 8. 如何強制32位應用程序在CreateObject中使用64位COM DLL?
- 9. 在VB6應用程序中使用.NET dll
- 10. 強制應用程序使用可選DLL運行
- 11. 強制web應用程序使用某些dll版本C#asp.net
- 12. 使用.net windows安裝程序安裝VB6應用程序和dll
- 13. 在控制檯應用程序中使用ocx
- 14. 在C#.NET控制檯應用程序中使用OCX控件
- 15. 如何在.net窗口應用程序中使用ocx
- 16. VB6應用程序需要comdlg32.ocx,在Windows Server 2008上運行
- 17. vb6項目fpSpr60.ocx丟失
- 18. 如何在VB6程序中使用ReportViewer VB.net DLL?
- 19. 如何從內存中釋放在VB6應用程序中調用的.Net DLL?
- 20. 從Excel中調用RegFree COM vb6 dll與ocx依賴關係
- 21. 如何使用shell32.dll中從C++控制檯應用程序
- 22. 如何從.NET中使用VB6 DLL?
- 23. 如何強制關閉應用程序
- 24. 如何使用chrome webview強制使用cordova應用程序?
- 25. 如何在rails應用程序中強制使用gem版本?
- 26. 如何強制當前目錄中的dll文件?
- 27. Facebook:強制用戶使用FBML登錄/安裝應用程序
- 28. 如何強制應用程序目標在IOS中使用一種語言?
- 29. Cakephp複製整個應用程序目錄和子目錄?
- 30. 如何強制使用zxing lib只有我的應用程序?
這是Win2k +上的正確答案。 但是,請注意,如果A.EXE具有嵌入式清單,或者存在A.EXE.manifest(例如啓用免註冊COM,使您的程序識別DPI等),則忽略.local文件因爲體現是爲了替代技術。 如果是這種情況,在清單中,您可以簡單地列出要從您的應用程序目錄中使用的文件,以強制它們從那裏加載: –
2009-04-19 09:26:09