2013-02-06 51 views
5

有没有办法在不提示用户的情况下安装ClickOnce应用程序?我正在谈论用户第一次运行应用程序时的“运行/不运行”。如何在不提示用户的情况下安装ClickOnce应用程序?

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

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

我还发现this post,这似乎是相关的,但同样,如果我们谈论同样的用户提示不知道......

回答

2

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

+0

感谢罗宾,这几乎是我的研究向我展示的。这确实是一个要在我的企业环境中部署的软件包。这是我希望我的员工随时可以运行的东西,因此无声安装是首选。 – Joe

+0

无提示安装对网络管理员编写脚本以部署给用户也有帮助。 – Mike

+0

当我的答案是准确的时候,这似乎不公平 - 只是因为你不喜欢答案。 – RobinDotNet

6

有可能避免“运行” /“不要运行”的提示,但你仍然有实际在复制文件的问题给用户,这通常需要他们通过链接启动.application。但是,您可能可以通过登录脚本或其他方式启动它。可能你已经以某种方式解决了这个问题,因为它暗示在你的问题中。你链接到的另一个问题围绕着这个问题悬停,但它并不能真正帮助你。

我知道你可以绕过“运行”/“不要运行”提示,因为我只是成功地使用了ClickOnce,我们将它作为自定义shell的自定义shell部署。关键在于ClickOnce必须由受信任的发布者签名。如果您在客户机上配置了正确的东西,那么即使是自签名也没问题。

因此,让网络管理员推出一个组策略,信任用于签署应用程序的代码签名证书。有一个关于如何做到这一点,在这里的TechNet信息:http://technet.microsoft.com/en-us/library/cc770315(v=WS.10).aspx,转载这里简单介绍一下:

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

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

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

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

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

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

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

1

除了MikeBazs回答,我想提供下面的“变通办法”,这使的点击,一旦-申请“非互动”和“近乎无声”(用户看到进步的安装-window在安装过程中,无需点击和/或可能)

有几个“问题”的考虑,但如果按照本指南中,结果应该是你所需要的:

1)在您的应用程序中签名:在Visual Studio中,您可以使用自己的证书轻松签署您的应用程序,这不是什么大问题应对。

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

现在,用户只需点击一下即可安装应用程序 - 无需担心任何安全问题。但是,我们希望零点击:

3)创建一个PowerShell脚本,位于服务器上,它调用应用程序的SETUP.EXE:

if (-not (Test-Path env:APPInstalled)){ 
    Start-Process "\\server\share\Application\setup.exe" 

    # Set Flag for "Installed" 
    [Environment]::SetEnvironmentVariable("APPInstalled", "1", "User") 
} 

我用一个用户环境变量称为APPInstalled以确定应用程序是否需要安装。

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

4.)修改您的应用程序的源代码:我使用了一个虚拟文件来检测应用程序的第一层。如果是firstrun(即正确安装后)我再次将它关闭:

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(); 
     } 

现在,用户可以执行thaht脚本,只是不需要进一步确认收到一旦安装和应用程序不安装后“自动启动”。

但我们要避免“点击”以及:

如果我们设置在启动文件夹中的PowerShell脚本 - 它弹出,这是丑陋的。如果我们将它设置为登录脚本,它不会在用户上下文中运行,这对于Click-Once是必需的。

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

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 -script登录后30秒,仅当用户登录时。

所有用户都会看到的是“安装”进度。

一言以蔽之:

  • 注册代码
  • 分发证书
  • 触发了PowerShell脚本
  • 包是PowerShell中inivisible vbs脚本内脚本安装
  • 部署vbs脚本到每台机器,使用任务计划程序确保它在用户上下文中运行。
相关问题