Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup Innosetup-识别标准用户的管理员用户和dll注册_Inno Setup_Pascalscript - Fatal编程技术网

Inno setup Innosetup-识别标准用户的管理员用户和dll注册

Inno setup Innosetup-识别标准用户的管理员用户和dll注册,inno-setup,pascalscript,Inno Setup,Pascalscript,在innosetup应用程序安装过程中,我正在注册一个dll(用于windows右键单击上下文菜单和图标覆盖,类似于dropbox/tortoise cvs),并执行一些其他操作。到目前为止,我只为管理员用户安装应用程序。dll将在HKCR、HKLM中写入信息。现在,我计划支持其他非管理员用户(标准用户)的安装 我试过以下几种方法 将管理员要求的权限更改为无 已将所有注册表更新从HKLM更改为HKCU 但是,如果我尝试安装应用程序,dll注册失败,因为无法在HKCR上写入。所以,我计划只为管

在innosetup应用程序安装过程中,我正在注册一个dll(用于windows右键单击上下文菜单和图标覆盖,类似于dropbox/tortoise cvs),并执行一些其他操作。到目前为止,我只为管理员用户安装应用程序。dll将在HKCR、HKLM中写入信息。现在,我计划支持其他非管理员用户(标准用户)的安装

我试过以下几种方法

  • 将管理员要求的权限更改为无
  • 已将所有注册表更新从HKLM更改为HKCU
但是,如果我尝试安装应用程序,dll注册失败,因为无法在HKCR上写入。所以,我计划只为管理员用户注册dll。对于其他普通用户,计划跳过dll注册并做其他事情。但我不知道,如何识别当前用户是管理员用户。有人能告诉我以下事情吗

  • 我们能否确定当前登录用户是否为管理员/高级用户
  • 我们可以注册没有管理员权限的dll(写HKCR)吗

感谢您的回复。

您可以检查当前用户是管理员还是超级用户:

[Code]
function IsRegularUser(): Boolean;
begin
    Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn);
end;

如果您正在将内容安装到HKLM,那么您已经为所有用户安装了内容,而不仅仅是管理员用户。所以你不应该改变这一点


在安装程序中正确的做法是永远不要向HKCU写入。(为了获得最佳效果,也不要写信给HKCR,而是写信给HKLM\Software\Classes。)

谢谢,它工作得很好。关于在standard user中注册上下文菜单DLL有什么想法吗?请注意,只有当您使用
PrivilegesRequired=none
时,这才有用——对于每一个其他值,都没有意义,因为您可以保证拥有管理员或非管理员。(另外,“超级用户”是一个过时的概念,在XP中被弃用,在未来的版本中不存在。)虽然可以编写一个
none
安装来适应该类型,但通常不值得重复逻辑和双重测试。只需选择
admin
lower
并坚持它。如果安装程序以管理员身份运行,安装程序如何知道使用哪个用户?我得到一个警告,我的安装程序可能没有预期的behaviorIt没有——这就是为什么建议不要这样做。HKCU用于应用程序本身,而不是安装程序。