gpt4 book ai didi

delphi - 以提升的权限运行在WIN7上失败

转载 作者:行者123 更新时间:2023-12-03 19:31:38 25 4
gpt4 key购买 nike

我正在WinXP系统上使用Delphi 6进行开发。

我一直在使用以下功能来运行具有提升权限的程序。

function LB_RunAsAdminWait(hWnd:       HWND;
filename: string;
Parameters: string): Boolean;
var sei: TShellExecuteInfo; // shell execute info
begin

Result := False; // default to failure

FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.Wnd := hWnd;
sei.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb := 'runas';
sei.lpFile := PChar(filename);
sei.lpParameters := PChar(Parameters);
sei.nShow := SW_SHOWNORMAL;

if ShellExecuteEx(@sei) then // if success
Result := True; // return sucess

if sei.hProcess <> 0 then begin // wait for process to finish
while WaitForSingleObject(sei.hProcess, 50) = WAIT_TIMEOUT do
Application.ProcessMessages;
CloseHandle(sei.hProcess);
end;

end; // of function LB_RunAsAdminWait


我怎么称呼它:

if (LB_RunAsAdminWait(FPGM.Handle,'RegSvr32',FName+' /s') = False) then
begin
ShowMessage('WARNING: unable to register OCX');
exit;
end;


FPGM.handle是我的应用程序的句柄
Fname是我要注册的OCX。

当我在WIN7机器上运行它时,它返回true(成功),但未注册OCX。

任何帮助,将不胜感激。

最佳答案

最可能的解释是,这是32位与64位的问题。 DLL是64位的,并且您正在运行32位的regsvr32。或相反亦然。或文件系统重定向器使您感到困惑。您将DLL放入了system32中,但是重定向器将其转换为SysWow64。

调试它的明显方法是删除无声开关,并让regsvr32告诉您出了什么问题。

顺便说一句,您已经发现,您不能使用ShellExecuteEx的返回值来确定服务器注册是否成功。 ShellExecuteEx的返回值仅告诉您进程是否已开始。

关于delphi - 以提升的权限运行在WIN7上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com