繁体   English   中英

VS 2003 在后期构建期间无法注册 regsvr32。 命令提示符没有问题

[英]VS 2003 fails to regsvr32 during post build. No issues from command prompt

Regsvr32 作为 DLL 项目的构建后事件失败。

生成后事件:regsvr32 /s /c "$(TargetPath)"(也尝试不带引号)。

删除 /s 会导致错误消息 LoadLibrary("...") 失败 - 找不到指定的模块。

如果我从命令提示符运行 regsvr32,结果是成功的。 如果我复制并运行甚至直接运行“BAT000019.bat”文件,我会收到结果消息“DllRegisterServer in...dll 成功”。 我已经在 Dependency Walker 中加载了 DLL,没有发现任何问题。 这在过去有效,但突然开始出现问题。 我有大约 50 个项目具有相同的后期构建事件,只有大约 3 个有这个问题。 生成bat文件时DLL文件确实存在(也许正在使用???)。

我没有看到生成的 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 的绝对路径。 (失败)不带引号(绝对路径中没有任何内容包含空格)。 (失败)

我认为您的项目不仅仅是由一个 DLL 制作的,也许您正在构建的 DLL 取决于其他库(检查 DependencyWalker 并验证LoadLibrary / GetProcAddress是否也是如此)但它们不存在于 dll 的构建后事件.

如果您从 output 目录中的命令提示符运行,那么您的 dll 就可以注册所需的一切。

据我所知,您无法为解决方案设置构建后事件,因此请检查您的项目依赖项/构建顺序)。 我假设您没有尝试在其 output 目录中单独注册一个 dll 而没有其依赖项(批处理中的路径应匹配$(TargetPath)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM