2012-04-06 16 views
1

Regsvr32作爲DLL項目的構建後事件失敗。在發佈後,VS 2003無法使用regsvr32。命令提示符沒有問題

Post Build Event: regsvr32/s/c「$(TargetPath)」(也試過不帶引號)。

刪除/ s會導致錯誤消息 LoadLibrary(「...」)失敗 - 找不到指定的模塊。

如果我運行從命令REGSVR32提示的結果是成功的。如果我複製並運行甚至直接運行「BAT000019.bat」文件,我會得到結果消息「DllRegisterServer in ... dll succeeded。」我在Dependency Walker中加載了DLL,沒有發現問題。這在過去有效,但突然開始出現問題。我有大約50個項目具有相同的構建後事件,但只有約3個項目存在此問題。 DLL文件在生成bat文件時確實存在(也許它正在使用???)。

我看不出有任何問題與生成bat文件:

@echo off 
regsvr32 /c "C:\ ... .dll" 
if error level 1 goto VCReportError 
goto VCEnd 
:VCReportError 
echo Project : error PRJ0019: A tool returned an error code from "Performing registration" 
exit 1 
:VCEnd 

其他信息: 操作系統:Windows XP SP3。 IDE:VS 2003 Pro(最新)。 語言:C++

我可以刪除後構建事件,但寧願爲我們的一些新的程序調試器保留它。

人對如何解決這一問題的任何想法?

其他的事情我已經試過: 相對路徑在生成後事件DLL。 (失敗) 後構建事件中DLL的絕對路徑。 (失敗) 使用不帶引號(絕對路徑中沒有包含空格)。 (失敗)

回答

1

我覺得你的項目是不是僅由一個DLL做,也許你正在構建的DLL依賴於其他(請與DependencyWalker andverify如果LoadLibrary/GetProcAddress過),但他們不是有爲dll的生成後事件。

如果從輸出目錄的命令提示符下運行有你需要的DLL,因此它可以被註冊的一切。

對於我所知道的,您不能爲解決方案設置後期生成事件,因此請檢查您的項目依賴性/構建順序)。我假設你沒有試圖在沒有依賴的情況下在其輸出目錄中單獨註冊dll(批處理路徑應該匹配$(TargetPath)

+0

感謝您的快速響應。所有依賴項都存在於已添加到系統路徑環境變量中的預定路徑中。這包括所有msvc * 70.dll和調試DLL和任何其他重新分發文件。 – 2012-04-06 14:29:27

+0

這有點棘手,但是:編寫一個帶有單個參數(完整路徑)的小程序,在生成後事件中調用它而不是regsrv32,記錄正在發生的事情(或者在調試中附加)。 – 2012-04-06 14:36:11

+0

創建一個將文件作爲命令行參數的統計應用程序。我用$(TargetPath)作爲參數調用了我的exe文件,並且在我的dll上獲得了正確的文件大小和文件權限。 好主意,但從我的結果中沒有看到任何有用的信息。 另一個注意:$(TargetPath)是68個字符。 – 2012-04-06 15:06:02