使应用程序可移植 - 注册 DLL 以及 system32 中的 DLL

使应用程序可移植 - 注册 DLL 以及 system32 中的 DLL

我想让一个应用程序可移植(在 Windows XP 上),以便它可以直接从 CD 运行。该应用程序需要注册一些 DLL 和 OCX,其中一些在注册时需要位于 system32 中(出于某种原因)。

在应用程序周围的包装程序/脚本中使用 regsvr32 注册大量 DLL 会有什么后果?这会搞乱系统吗?当文件被删除时会发生什么(因为它们位于可移动媒体上)?我想我可以在便携式应用程序停止时再次取消注册它们,但如果其中一个是其他应用程序也使用的公共 DLL 怎么办?取消注册它会破坏其他应用程序吗?

我认为在启动可移植应用程序时将文件随机复制到 system32 是个坏主意。为什么应用程序要求某些 DLL 和 OCX 位于 System32 文件夹中?有没有办法解决这个问题?唯一的方法是让包装程序/脚本确保在复制之前不存在任何文件,并在运行应用程序后将其删除吗?

这些功能的工作方式在 Windows Vista 和 Windows 7 中发生了改变吗?

我想制作的可移植应用程序是(挪威)家谱应用程序 Embla Familie og Slekt 的演示版本(挪威语网站,由谷歌翻译)。我的祖父做了很多家谱工作,最近去世了,所以我想把他的工作分发给我的亲戚。如果他们只需插入一张 CD,软件就会弹出来,那就太好了。对于新手计算机用户来说,安装和设置它以使用我祖父的数据有点复杂。(我曾尝试联系作者但没有成功,但如果我能让它工作,我会再试一次,以确保分发演示是合法的)

谢谢,请原谅我的无知——我通常不运行 Windows。:)

答案1

我不知道为什么 DLL 必须放在 System32 中;它们不应该放在这儿,将应用程序 DLL 放在系统目录中是不好的做法。

是的,公开 COM 对象的 DLL 和 OCX(例如需要注册的 DLL 和 OCX)确实需要注册并列在注册表中。但是,在 Windows XP 及更高版本中,有免注册的 COM。简而言之,对于每个 .DLL 和 .EXE,您创建一个 filename.ext.manifest 文件,其中列出了它导出和使用的所有组件。不幸的是,现实情况要复杂得多。请参阅本文以了解描述理论上可以找到清单文件所需的信息,但您需要对 COM 有很好的理解。

答案2

很多年前,我就知道,当 Windows 需要一个未注册的 dll 文件时,它会自动在 exe 文件的目录中查找。在这样的世界中,使应用程序可移植非常容易。

我不知道我是否记得正确(或者或多或少正确)或者是否仍然如此,但将所有文件复制到 USB 记忆棒并将其放入另一台计算机将是一个相当快速和简单的检查。

相关内容