gpt4 book ai didi

inno-setup - Inno Setup 以另一个用户身份运行/执行代码

转载 作者:行者123 更新时间:2023-12-04 12:51:22 24 4
gpt4 key购买 nike

尽可能多地使用 ExecAsOriginalUser要使用启动/登录的用户凭据运行某些内容,是否有命令或方法可以以特定用户身份运行特定代码段?

为了进一步解释,我在安装结束时将计算机名称写入文件共享的日志中。只要不使用在服​​务器上没有匹配的本地管理员帐户的本地管理员帐户进行安装,就可以完美地工作。因此,我需要做的是让写入日志的特定代码作为特定用户帐户执行,我有凭据,我知道服务器上存在该帐户。

我使用的代码如下:

{ Auto audit the computer name }
procedure AutoAudit();
var
strComputerName: TArrayOfString;
strAutoAuditFile: String;
begin
strAutoAuditFile := '\\' + ClientConnectionPage.Values[0] + '\Audit\Client Audit.txt';
SetArrayLength(strComputerName, 1);
strComputerName[0] :=
ExpandConstant('{computername} ') + GetDateTimeString('dd/mm/yyyy hh:mm', '/', ':');
SaveStringsToFile(strAutoAuditFile, strComputerName, True);
end;

所以,我需要的是一种执行 SaveStringsToFile 的方法充当另一个用户。

我想到了一种相当麻烦的方法来做到这一点,这将涉及测试可用的驱动器号、使用帐户凭据映射驱动器、写入文件然后断开驱动器的连接。但是,我希望有一种更优雅的方法来做到这一点?

最佳答案

您必须使用 LogonUser WinAPI function以不同的帐户运行一段代码。

可能可以从 Inno Setup 代码运行它,但我还没有找到示例。

或者,您可以开发一个单独的小应用程序来模拟其他用户并将该应用程序嵌入到您的安装程序中。

在 C#/VB.NET 中,您可以使用 Impersonator class (在内部使用 LogonUser):

using System;
using System.IO;

class Program
{
static void Main(string[] args)
{
using (new Impersonator("username", "domain", "password"))
{
string strAutoAuditFile = @"\\" + args[0] + @"\Audit\Client Audit.txt";
string strComputerName =
Environment.MachineName + " " + DateTime.Now.ToString("dd/mm/yyyy hh:mm");
File.WriteAllText(strAutoAuditFile, strComputerName);
}
}
}

从 Inno Setup 运行应用程序,如:

[Files]
Source: "getcompname.exe"; Flags: dontcopy

[Code]
...

var
ResultCode: Integer;
begin
...
ExtractTemporaryFile('getcompname.exe');
ExecAsOriginalUser(
ExpandConstant('{tmp}') + '\getcompname.exe ',
ClientConnectionPage.Values[0],
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
...
end;

如果您没有控制台应用程序开发经验,请注意“小”应用程序甚至可以是使用 runas command 的批处理文件。 (不允许自动指定密码)或 PsExec (确实如此)。

关于inno-setup - Inno Setup 以另一个用户身份运行/执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510237/

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