【问题标题】:How to get Inno Setup to install different programs running as different users?如何让 Inno Setup 安装以不同用户身份运行的不同程序?
【发布时间】:2022-01-27 13:31:10
【问题描述】:

我正在使用 Inno Setup 分两部分部署 Windows 10 应用。用 Go 编写...

service.exe 是一个 Windows 服务,需要作为具有提升权限的系统运行。它操纵网络配置。

settings.exe 是一个系统托盘图标和设置 GUI,它通过 RPC 与服务通信。这需要在用户的帐户下运行。

如何让 Inno Setup 部署它们,以便它们在正确的帐户下运行?

为了安装服务,安装需要提升运行。但如果我这样做,它会安装 GUI 以使用系统帐户。并且我需要创建注册表项以在登录后自动启动settings.exe。

我错过了什么?

【问题讨论】:

  • 安装程序(是否基于 Inno Setup)通常以管理员身份执行。那里没有错。我只是无法理解您所说的“但是如果我这样做,它会安装 GUI 以也使用系统帐户”。即使应用程序是由管理员安装的,也可以由非管理员用户启动。
  • 我想我明白了。谢谢。见下文。

标签: go windows-services inno-setup


【解决方案1】:

我想我明白了...我遇到的问题是对配置文件的权限。即服务在 GUI 之前启动并且服务作为系统运行。因此,配置文件归系统所有,当前用户无权访问。而且服务无法修复它,因为它不知道用户是谁。

为了解决这个问题,我首先运行 GUI 只是为了以当前用户身份创建配置文件。现在它在 ACL 中拥有当前所有者作为完全控制权。并且系统仍然可以访问它。

所以...在 Inno 设置中...

[Run]
WorkingDir: "{app}"; Filename: "{app}\settings.exe"; Parameters: "install"; StatusMsg: "Installing with user permission"; Flags: runasoriginaluser runhidden 
WorkingDir: "{app}"; Filename: "{app}\service.exe"; Parameters: "install"; StatusMsg: "Installing with elevated permission"; Flags: runascurrentuser runhidden 
WorkingDir: "{app}"; Filename: "{app}\settings.exe"; Parameters: "open"; StatusMsg: "Starting settings."; Flags: nowait runasoriginaluser

我还发现使用 EXE(不是 Inno Setup)更容易进行配置,例如为启动创建注册表项等...

谢谢

【讨论】:

  • 我不确定我是否在同一个波长上,但我们中的许多人在公共文件夹中安装默认文件/注册表,蜂巢。然后,当用户启动应用程序时,由我们的应用程序决定是否要为用户复制这些默认值。就像你说的,应用程序(exe)在启动时执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2015-04-15
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多