如何在不提示用户的情况下安装ClickOnce应用程序?

时间:2013-02-06 14:58:17

标签: clickonce

有没有办法在不提示用户的情况下安装ClickOnce应用程序?我正在谈论" Run / Don&#t运行"用户第一次运行应用程序时获取。

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

我只能找到有关如何以静默方式更新过去安装的应用程序的信息,但没有关于第一次静默安装应用程序的信息。

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

4 个答案:

答案 0 :(得分:8)

可以避免"运行" /"不要运行"提示,虽然您仍然存在将文件实际复制到用户的问题,这通常需要他们通过链接启动.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. 在导航窗格中,打开“计算机配置\ Windows设置\安全设置\公钥策略\受信任的发布者”。

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

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

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

答案 1 :(得分:6)

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

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

Walkthrough: Creating a Custom Installer for a ClickOnce Application

答案 2 :(得分:2)

除了MikeBazs答案之外,我还想提供以下内容"解决方法"这使得安装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脚本部署到每个用户启动文件夹。

答案 3 :(得分:1)

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