Inno setup 我可以将Inno设置作为服务和正常流程使用吗?

Inno setup 我可以将Inno设置作为服务和正常流程使用吗?,inno-setup,Inno Setup,我正在使用Inno安装程序创建安装程序和更新程序。 我希望更新程序能够作为服务和正常进程运行(取决于我是否以管理员身份运行安装程序)。 我创建的应用程序能够作为服务和正常进程运行,因此我可以假设这在inno设置中也是可以实现的。 我可以创建一个类似于服务和正常进程的安装程序吗 不可能让Inno安装程序作为服务运行,因为它不是服务应用程序 可以让服务进程从非用户上下文启动Inno安装程序,例如自动升级本身。然而,这样做需要非常小心的注意 例如,您必须: 使用/VERYSILENT/SUPPRES

我正在使用Inno安装程序创建安装程序和更新程序。
我希望更新程序能够作为服务和正常进程运行(取决于我是否以管理员身份运行安装程序)。
我创建的应用程序能够作为服务和正常进程运行,因此我可以假设这在inno设置中也是可以实现的。

我可以创建一个类似于服务和正常进程的安装程序吗

不可能让Inno安装程序作为服务运行,因为它不是服务应用程序

可以让服务进程从非用户上下文启动Inno安装程序,例如自动升级本身。然而,这样做需要非常小心的注意

例如,您必须:

  • 使用
    /VERYSILENT/SUPPRESSMSGBOXES/NORESTART
    启动安装程序以隐藏所有标准UI

  • 使用
    AppMutex
    (在
    Global
    名称空间中具有相应的互斥)确保安装程序在启动安装程序后等待服务终止

  • 确保启动过程已提升为admin(请注意,这是一种安全风险,因为这意味着服务在正常操作期间以admin权限运行)

  • 确保在启动安装程序之前,该服务确保它运行的是合法的升级包,而不是恶意软件。强烈鼓励进行数字签名验证

  • 确保脚本未使用
    MsgBox
    或以其他方式显示UI。(如果交互式安装需要,请使用
    SuppressibleMsgBox
    。)


TLDR:虽然你可以,但你不应该。这很难做到正确,而且很容易打开安全漏洞。让用户自己下载并运行安装程序。

什么意思是“希望更新程序能够作为服务运行”?为什么需要将其作为服务运行?该服务将做什么?您可能希望使用(在循环中)等待互斥,而不是。
AppMutex
将中止安装程序(在静默模式下)。如果在安装程序进行互斥检查之前服务没有退出(你很难保证),安装程序将不会运行。我的目标是创建一个静默自动更新程序。当没有用户登录时,作为服务运行的应用程序是否可以调用更新程序本身?我知道服务可以在没有用户登录的情况下运行,所以我假设我还需要一个Upter作为服务,这样它就可以在没有任何用户登录的情况下进行更新。我还需要从提升的源运行更新程序,这样UAC就不会出现。如果我从服务中调用更新程序,UAC是否会弹出?如果从已提升的进程运行安装程序,UAC将不会显示,但是
runasoriginaluser
和friends也将提升运行。@MartinPrikryl在静默模式下运行时,Inno会自动循环一段时间,同时检查互斥锁。只有当应用程序需要很长时间才能退出时,它才会中止,因此您应该确保在调用安装程序之前尽可能多地关闭,然后立即退出。