Delphi 在Windows7中创建复合应用程序

Delphi 在Windows7中创建复合应用程序,delphi,windows-7,uac,registry,typelib,Delphi,Windows 7,Uac,Registry,Typelib,我需要将一套Windows应用程序(在XP下运行,几乎没有启用安全性)移植到具有不同安全级别的Windows 7,这取决于我们的客户端可能如何配置它。每个功能区域都是一个单独的可执行文件或DLL,由一个中央“复合”应用程序下载和注册。这意味着不同的部分都连接在一起,实际上形成了一个大型的单一应用程序 我的问题是,复合应用程序通过COM注册表了解其他应用程序,在适当的情况下,可以作为类型库或OCX 我在这里尝试了几个问题,试图解决我遇到的问题,但我似乎无法回避需要提升访问权限才能注册应用程序和访问

我需要将一套Windows应用程序(在XP下运行,几乎没有启用安全性)移植到具有不同安全级别的Windows 7,这取决于我们的客户端可能如何配置它。每个功能区域都是一个单独的可执行文件或DLL,由一个中央“复合”应用程序下载和注册。这意味着不同的部分都连接在一起,实际上形成了一个大型的单一应用程序

我的问题是,复合应用程序通过COM注册表了解其他应用程序,在适当的情况下,可以作为类型库或OCX

我在这里尝试了几个问题,试图解决我遇到的问题,但我似乎无法回避需要提升访问权限才能注册应用程序和访问注册表的问题。我们的客户期望的下载和激活过程与当前XP下相同(相对而言)

那么,有没有人可以在不需要经过提升过程的情况下注册TypeLibrary和OCX控件的解决方案呢

更新:

任何解决方案都不一定要用Delphi,用任何语言解决这个问题都会对我有很大帮助


提前感谢

注册COM应用程序等需要在注册表中根据HKLM和/或HKCR创建密钥和值。要写入这些注册表配置单元,必须提升应用程序。例如,Win7/Vista上的安装程序会自动运行提升版,并在启动时用UAC提示符提示用户(除非您的用户可能已关闭UAC)

我认为您需要温和地重新教育您的客户对Vista/Win7的一些修改期望

如果您尝试在未提升的情况下写入HKLM etc,那么您可能会遇到Vista/Win7虚拟化您对注册表的访问,而您的应用程序无法写入其认为正在写入的位置的问题


这里有几个答案,这些答案应该提供成功提升Delphi应用程序(或其部分)所需的所有知识

我想我已经解决了。如果您覆盖每个OCX的
DllRegisterServer
DllUnRegisterServer
方法,并在其中将对注册表HKCR配置单元的访问重定向到HKCU,然后将
RegisterTypeLibrary
comserv.pas
更改为在
RegisterTypeLib
调用失败时调用RegisterTypeLibForUser,然后可以注册OCX控件,而无需提升。我认为类型库也是如此

秘密在于OCX控件需要更改,而不是注册它的程序


不确定我是否已经正确地总结了这一点

添加什么注册表TypeLibForUser?我需要高架通道吗?我不确定。我们希望为任何用户注册我们的COM服务器等。您还询问了关于“注册表访问”的问题,我认为这意味着对HKLM的注册表访问。无论类型库注册如何,您都需要提升访问权限才能写入HKLM或HKCR(如果您没有运行提升,那么我认为您将写入注册表的虚拟化视图)。可以更改对HKLM的访问权限,类型库的注册是一个问题——Delphi似乎只制作访问HKLM的控件,而不是HKCU。我得承认我对这个有点迷茫。