【问题标题】:How to install ClickOnce app without prompting the user?如何在不提示用户的情况下安装 ClickOnce 应用程序?
【发布时间】:2021-11-20 21:42:13
【问题描述】:

有没有办法在不提示用户的情况下安装 ClickOnce 应用程序?我说的是用户第一次运行应用程序时得到的“运行/不运行”。

似乎有一些线索here,但我相信这是关于跳过“海拔”(UAC)和安全提示,而不是实际的初始“运行/不运行”屏幕。

我只能找到有关如何静默更新过去安装的应用程序的信息,但找不到有关首次静默安装应用程序的信息。

我还发现this post 似乎是相关的,但同样,不确定我们是否在谈论相同的用户提示...

【问题讨论】:

    标签: clickonce


    【解决方案1】:

    可以避免“运行”/“不运行”提示,尽管您仍然存在将文件实际复制给用户的问题,这通常需要他们通过链接启动 .application。但是,您可以通过登录脚本或类似的方式启动它。大概您已经以某种方式解决了该问题,因为它暗示了您的问题。您链接到的另一个问题围绕着这个问题徘徊,但它并没有真正让您一路走来。

    我知道您可以绕过“运行”/“不运行”提示,因为我刚刚使用 ClickOnce 成功完成了它,我们将其部署为自助服务终端机器上的自定义 shell。关键是 ClickOnce 必须由受信任的发布者签名。如果您在客户端计算机上配置了正确的东西,即使是自签名也是可以的。

    因此,让网络管理员推出一个组策略,该策略信任用于签署您的应用程序的代码签名证书。这里有关于如何在 TechNet 上执行此操作的信息:http://technet.microsoft.com/en-us/library/cc770315(v=WS.10).aspx,此处简要转载:

    1. 打开组策略管理控制台。

    2. 查找现有 GPO 或创建新 GPO 以包含证书设置。确保 GPO 与您希望其用户受策略影响的域、站点或组织单位相关联。

    3. 右键单击 GPO,然后选择编辑。组策略管理编辑器打开,并显示策略对象的当前内容。

    4. 在导航窗格中,打开 Computer Configuration\Windows Settings\Security Settings\Public Key Policies\Trusted Publishers。

    5. 单击“操作”菜单,然后单击“导入”。

    6. 按照证书导入向导中的说明查找并导入证书。

    7. 如果证书是自签名的,并且无法追溯到受信任的根证书颁发机构证书存储区中的证书,那么您还必须将证书复制到该存储区。在导航窗格中,单击受信任的根证书颁发机构,然后重复步骤 5 和 6,将证书副本安装到该存储区。

    【讨论】:

      【解决方案2】:

      如何创建自定义 ClickOnce 安装程序? http://msdn.microsoft.com/en-us/library/dd997001.aspx

      更新链接(2016 年 10 月 6 日)

      Walkthrough: Creating a Custom Installer for a ClickOnce Application

      【讨论】:

      • 引用的解决方案效果很好。以防万一链接消失,它会使用 InPlaceHostingManager 类来下载清单,断言应用程序要求,然后下载(安装)应用程序。
      【解决方案3】:

      除了 MikeBazs Answer,我想提供以下“解决方法”,它使 Click-Once-Application 的安装“非交互式”和“几乎无声”(用户在安装过程中看到进度窗口,无需点击和/或可能)

      有一些“问题”需要考虑,但如果您遵循本指南,结果应该是您所需要的:

      1.) 签署您的应用程序:在 Visual Studio 中,您可以使用自己的证书轻松签署您的应用程序,这没什么大不了的。

      2.) 分发证书:为了避免该对话框,如果应安装应用程序,您需要将您的证书分发到任何机器上的以下商店(为此使用 GPO ): Trusted PublishersTrusted Root Certification Authorities

      现在,用户只需单击即可安装应用程序 - 没有安全问题。但我们希望零点击:

      3.) 创建一个位于服务器上的 powershell 脚本,该脚本调用应用程序的 setup.exe(如果尚未安装):

      $appInfo = Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall | foreach-object {Get-ItemProperty $_.PsPath}
      $displayName = $appInfo | ? { $_.displayname -eq "MyApplicationName" } | select displayName
      
      if ($displayName -eq $null){
        # MyApplicationName not installed, install! 
        Start-Process "\\server\share\MyApplication\Application\setup.exe"
      }
      

      现在,用户可以执行该脚本,只需安装一次,无需进一步确认。但应用程序在安装后启动。

      4.) 修改应用程序的源代码:我使用了一个虚拟文件来检测应用程序的首次运行。如果它是第一次运行,(即安装后)我只是再次关闭它:

      private void Form1_Load(object sender, EventArgs e)
          {
              //first run? That's a initial deployment, close application.
              if (!File.Exists("C:\\some\\static\\path\\notfirstrun.dat"))
              {
                  File.WriteAllText("C:\\some\\static\\path\\notfirstrun.dat", "1");
                  Application.Exit();
              }
      

      现在,用户可以执行该脚本,只需安装一次,无需进一步确认,并且应用程序在安装后不会“自动启动”。

      但我们也想避免“点击”:

      如果我们在 Startup-Folder 中设置 powershell 脚本 - 它会弹出,这很难看。如果我们将其设置为 Login-Script,它不会在用户上下文中运行,这是 Click-Once 所必需的。

      作为“这个”问题的解决方法,您可以将其包装在 vbs 脚本中,调用 powershell 脚本。请注意,这是在用户上下文中执行的,因此用户需要权限才能执行 powershell-scripts:

      Dim objShell
      Set objShell=CreateObject("WScript.Shell")
      
      strCMD="powershell.exe -sta -noProfile -NonInteractive -nologo -ExecutionPolicy Bypass -f \\server\share\scripts\install_App.ps1" 
      objShell.Run strCMD,0,True
      

      最后,使用 GPO 将您的 vbs 脚本部署到任何用户的启动文件夹中。

      用户将看到的只是“安装”进度。

      简而言之:

      • 签署您的代码
      • 分发您的证书
      • 使用 powershell 脚本触发安装
      • 将该 powershell 脚本包装在一个不可见的 vbs 脚本中
      • 将 vbs 脚本部署到每个用户的启动文件夹。

      【讨论】:

        【解决方案4】:

        如果不提示用户,就无法安装 ClickOnce 应用程序。如果您希望用户能够双击它,并且它只是在没有与用户验证的情况下安装,请不要使用 ClickOnce。坦率地说,根据我的经验,只有在企业环境中通过 SMS 推送的恶意软件和程序包才会在没有任何提示的情况下安装给用户。

        【讨论】:

        • 谢谢罗宾,我的研究也向我展示了这一点。这确实是一个要部署在我的企业环境中的包。这是我希望我的员工一直运行的东西,因此首选静默安装。
        • 静默安装也有助于网络管理员编写脚本以部署给用户。
        • 当我的答案准确时,将其 -1 似乎不公平,只是因为您不喜欢这个答案。
        • 我的猜测是因为它不准确并且被接受的答案:-P
        • 这是进行静默安装的绝佳理由:Chocolatey。 ClickOnce 是一个巨大的痛点。
        猜你喜欢
        • 1970-01-01
        • 2011-02-19
        • 2010-10-05
        • 2018-10-31
        • 2010-12-18
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        相关资源
        最近更新 更多