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的絕對路徑。 (失敗) 使用不帶引號(絕對路徑中沒有包含空格)。 (失敗)
感謝您的快速響應。所有依賴項都存在於已添加到系統路徑環境變量中的預定路徑中。這包括所有msvc * 70.dll和調試DLL和任何其他重新分發文件。 – 2012-04-06 14:29:27
這有點棘手,但是:編寫一個帶有單個參數(完整路徑)的小程序,在生成後事件中調用它而不是regsrv32,記錄正在發生的事情(或者在調試中附加)。 – 2012-04-06 14:36:11
創建一個將文件作爲命令行參數的統計應用程序。我用$(TargetPath)作爲參數調用了我的exe文件,並且在我的dll上獲得了正確的文件大小和文件權限。 好主意,但從我的結果中沒有看到任何有用的信息。 另一個注意:$(TargetPath)是68個字符。 – 2012-04-06 15:06:02