Excel Inno设置-以管理员身份注册组件

Excel Inno设置-以管理员身份注册组件,excel,inno-setup,Excel,Inno Setup,基于优秀的Excel加载项安装程序(Daniel的XL工具箱),我构建了一个安装文件,其中需要注册一些ActiveX [Files] ; The include file makes adds all .XLA and .XLAM files contained in the ; SOURCEDIR to the project. Source: "c:\source\path\MSCOMCTL.OCX"; \ DestDir: "\users\public\EzPasteFiles"

基于优秀的Excel加载项安装程序(Daniel的XL工具箱),我构建了一个安装文件,其中需要注册一些ActiveX

[Files]
; The include file makes adds all .XLA and .XLAM files contained in the
; SOURCEDIR to the project.

Source: "c:\source\path\MSCOMCTL.OCX"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver      
Source: "c:\source\path\DAS_AX_Knob.dll"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver    
Source: "c:\source\path\GIF89.DLL"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver 
我需要安装加载项,然后在开始注册文件之前,检查管理员权限,如果用户没有权限,则会显示一条消息,要求输入管理员密码,以便进行注册。我知道它可以在安装开始时完成,但是如果它是标准用户帐户,则不会激活加载项。加载项需要注册组件,标准用户无法正确安装

我希望在注册开始前启动类似的程序:

MyProgChecked:=not(IsAdminLoggedOn或isPowerRuserLoggedon);
如果MyProgChecked=True,则
开始
MsgBox(
“请注意:”#13#13
“看来你作为一名管理人员并没有血汗淋漓”#13#13
'请以管理员身份中止并重新安装EzPaste'#13#13
“(要以管理员身份安装,只需将exe安装程序保存到任何位置,然后右键单击它即可使用此功能,或向it管理员询问正确的指令即可”。”,
MB确认,MB_确定);
{请求Pwd的弹出消息}
退出过程(0);
终止
我当然愿意接受任何其他方法


我也很高兴了解没有管理员权限的域用户(Windows server)如何继续安装加载项。

您可以以管理员身份执行
regsvr32.exe
,方法如下:

[文件]
资料来源:“MyDll.dll”;DestDir:“{app}”;后安装:RegMyDll
[守则]
程序RegMyDll;
变量
路径:字符串;
RegSvr:字符串;
参数:字符串;
注册:布尔;
错误代码:整数;
开始
路径:=ExpandConstant(CurrentFilename);
RegSvr:=“regsvr32.exe”;
参数:=格式('/s“%s”,[Path]);
日志(格式('使用“%s”%s注册%s,[Path,RegSvr,Params]);
注册:=
ShellExec('runas',RegSvr,Params',SW_HIDE,ewwaitunFilterminated,ErrorCode);
如果已注册且(ErrorCode=0),则
开始
日志(格式('Registered%s',[Path]);
终止
其他的
开始
MsgBox(格式('注册%s失败,代码为%d',[Path,ErrorCode]),mbError,MB_OK);
终止
终止


另一种实现是仅为需要管理员权限的注册创建子安装程序

有关类似示例,请参见


或者使用相反的方法。使用需要管理员权限

[Setup]
PrivilegesRequired=admin
(这是默认设置)

但将文件部署到原始用户文件夹。

查看我的答案。

您可以以管理员身份执行
regsvr32.exe
,方法如下:

[文件]
资料来源:“MyDll.dll”;DestDir:“{app}”;后安装:RegMyDll
[守则]
程序RegMyDll;
变量
路径:字符串;
RegSvr:字符串;
参数:字符串;
注册:布尔;
错误代码:整数;
开始
路径:=ExpandConstant(CurrentFilename);
RegSvr:=“regsvr32.exe”;
参数:=格式('/s“%s”,[Path]);
日志(格式('使用“%s”%s注册%s,[Path,RegSvr,Params]);
注册:=
ShellExec('runas',RegSvr,Params',SW_HIDE,ewwaitunFilterminated,ErrorCode);
如果已注册且(ErrorCode=0),则
开始
日志(格式('Registered%s',[Path]);
终止
其他的
开始
MsgBox(格式('注册%s失败,代码为%d',[Path,ErrorCode]),mbError,MB_OK);
终止
终止


另一种实现是仅为需要管理员权限的注册创建子安装程序

有关类似示例,请参见


或者使用相反的方法。使用需要管理员权限

[Setup]
PrivilegesRequired=admin
(这是默认设置)

但将文件部署到原始用户文件夹。

请参阅我的答案。

我不明白您想要什么-首先您写下“我知道可以在安装开始时完成”-但在我看来,您的伪代码正好表明-以“管理员”身份重新启动安装程序,以便要求用户提供管理员凭据+我也不明白“但是,如果加载项是标准用户帐户,则它将不会被激活“-您能详细说明一下吗?由于加载项需要注册的组件,标准用户无法正确安装它。为此,标准用户需要以管理员身份运行安装程序,但加载项将安装在管理员帐户中,并且不会加载到标准用户的Excel中。因此,我想在没有任何权限的情况下安装,并仅将注册提升为管理员,我假设注册在安装结束时进行,“但是加载项将安装在管理员帐户中,并且不会加载到标准用户的Excel中。”-安装涉及什么?也许你应该给我们一些有关Excel插件安装的背景资料。-你所要求的是可行的。但是我发现允许用户几乎完成安装是错误的,只在最后要求管理员权限。如果用户没有管理员密码怎么办?那么,整个安装是毫无意义的。你应该一开始就问。但是为用户安装,而不是为管理员安装。-但是,真的没有办法为所有用户安装吗?正如我所说,如果在开始时被询问,并且安装是作为管理员使用密码完成的,Excel加载项将在管理员用户帐户中注册,而不是在标准用户帐户中注册。该加载项位于(c:\users\avibe\u 000\AppData\Roaming\Microsoft\AddIns)以供管理员和用户使用(c:\Users\Standard User\AppData\Roaming\Microsoft\AddIns)对于Standard Users,我不明白您想要什么-首先您写“我知道可以在安装开始时完成”-但在我看来,您的伪代码正好表明-以“管理员”身份重新启动安装程序,因此要求用户提供管理员凭据+我也不理解“但如果它是标准用户帐户,则该加载项将不会被激活”-您可以详细说明吗?作为加载项