如何从inno设置中测试是否存在Windows组?

时间:2015-01-29 20:53:26

标签: inno-setup

如何测试是否已设置Windows组?你能以某种方式使用来自的反应:

Exec('net.exe', 'localgroup', '', SW_SHOW, ewWaitUntilTerminated, Result);

将列出组到命令提示符? (我知道结果是一个错误代码,其中0表示成功,只是为了清楚。)

有办法吗?有不止一种方式吗?

1 个答案:

答案 0 :(得分:1)

我还没有对此进行测试,或者有时间计算出确切的过程或语法,但您可以按照建议使用net localgroup使用命令重定向(请参阅https://technet.microsoft.com/en-us/library/bb490982.aspx),找到组名并将其输出到文本文件。然后,您可以使用LoadStringFromFile将其读入Inno Setup,然后您需要做的就是比较两个字符串。

因此,仔细查看了这一点,看看管理员组是否存在,您可以使用:

[Run]
Filename: "{cmd}"; Parameters: "/c ""net localgroup | find /i ""Administrators"" > ""{tmp}\groupresult.txt"""""; StatusMsg: "Querying user groups..."; Flags: runhidden

[Code]
var
  strGroupResult: String;
begin
  LoadStringFromFile(ExpandConstant('{tmp}\groupresult.txt'), strGroupResult);
  if strGroupResult = '*Administrators' then
    begin
    //Code to execute if group exists
    ...
    end;
  DeleteFile(ExpandConstant('{tmp}\groupresult.txt'));
end;

请注意,net localgroup在组名前面返回星号(*),因此字符串比较也需要包含星号。

如果您需要在[Run]部分之前执行此操作,则可以在Exec部分中编写类似的[Code]行以运行相同的过程。