这确实是a previous one的问题,我需要为每个用户注册应用程序,TLB和OCX,而不是注册到HKLM。我写了下面的代码 - 基于这里和其他地方的答案,但TLB未注册 - 不会引发错误,只是什么都不会发生(此代码片段来自Embarcadero websiteRegisterTypeLibForUser调用似乎不工作 - 任何想法?
procedure RegisterTypeLibrary(TypeLib: ITypeLib; const ModuleName: string);
var
Name: WideString;
HelpPath: WideString;
RegisterTypeLibForUser : function(tlib: ITypeLib; szFullPath, szHelpDir: POleStr): HResult; stdcall;
res : HResult;
begin
Name := ModuleName;
HelpPath := ExtractFilePath(ModuleName);
res:=RegisterTypeLib(TypeLib, PWideChar(Name), PWideChar(HelpPath));
if res <> S_OK then begin
@RegisterTypeLibForUser:=GetProcAddress(GetModuleHandle('oleaut32.dll'), 'RegisterTypeLibForUser');
if (@RegisterTypeLibForUser <> nil) then begin
res:=RegisterTypeLibForUser(TypeLib, PWideChar(Name), PWideChar(HelpPath));
end;
end;
//MessageBox(GetForegroundWindow, PChar(IntToHex(res, 8)), nil, MB_OK);
OleCheck(res);
end;
任何人有任何指针作为。我现在失去了
更新:所有帮助和建议
谢谢你,所以要澄清...
据我了解,这,我应该不属于R平等地提高许可,所以这应该是工作,但我可能是错的。应用程序没有被虚拟化(或者至少不是这个意思),目前它只是调用上面的代码,没有别的。
如果我以管理员身份运行它(或者至少不会抛出错误),不提升它会给我一个错误。所以我可以不这样做,或者我做错了吗?这与我通过regsvr32
注册时相同,虽然这是一个稍微不同的问题 - 如何做到这一点,但为OCX控件。
您的意思是更改并重新编译VCL - 或者可以将它视为本地文件的副本吗? – Mmarquee 2010-03-24 10:06:51
不,我的意思是你需要在注册表中注册你的COM类。 RegisterTypeLib不会在CLSID中为您的CoClass创建注册表项。 – ChristianWimmer 2010-03-26 10:45:27