有没有办法在不提示用户的情况下安装ClickOnce应用程序?我正在谈论用户第一次运行应用程序时的“运行/不运行”。如何在不提示用户的情况下安装ClickOnce应用程序?
似乎有一些线索here,但我相信它是关于跳过“海拔”(UAC)和安全提示,而不是实际的初始“运行/不运行”屏幕。
我只能找到有关如何静默更新过去安装的应用程序的信息,但没有关于第一次静默安装应用程序的信息。
我还发现this post,这似乎是相关的,但同样,如果我们谈论同样的用户提示不知道......
有没有办法在不提示用户的情况下安装ClickOnce应用程序?我正在谈论用户第一次运行应用程序时的“运行/不运行”。如何在不提示用户的情况下安装ClickOnce应用程序?
似乎有一些线索here,但我相信它是关于跳过“海拔”(UAC)和安全提示,而不是实际的初始“运行/不运行”屏幕。
我只能找到有关如何静默更新过去安装的应用程序的信息,但没有关于第一次静默安装应用程序的信息。
我还发现this post,这似乎是相关的,但同样,如果我们谈论同样的用户提示不知道......
有没有办法不提示用户安装一个ClickOnce应用程序。如果您希望用户能够双击它,并且仅在未经用户验证的情况下安装,则不要使用ClickOnce。坦率地说,根据我的经验,只有在企业环境中使用SMS推送的恶意软件和软件包才会在没有任何提示的情况下安装。
如何创建自定义ClickOnce安装程序? http://msdn.microsoft.com/en-us/library/dd997001.aspx
更新的链接(2016年10月6日)
Walkthrough: Creating a Custom Installer for a ClickOnce Application
引用的解决方案效果很好。为了防止链接消失,它使用InPlaceHostingManager类来下载清单,断言应用程序需求然后下载(安装)应用程序。 –
有可能避免“运行” /“不要运行”的提示,但你仍然有实际在复制文件的问题给用户,这通常需要他们通过链接启动.application。但是,您可能可以通过登录脚本或其他方式启动它。可能你已经以某种方式解决了这个问题,因为它暗示在你的问题中。你链接到的另一个问题围绕着这个问题悬停,但它并不能真正帮助你。
我知道你可以绕过“运行”/“不要运行”提示,因为我只是成功地使用了ClickOnce,我们将它作为自定义shell的自定义shell部署。关键在于ClickOnce必须由受信任的发布者签名。如果您在客户机上配置了正确的东西,那么即使是自签名也没问题。
因此,让网络管理员推出一个组策略,信任用于签署应用程序的代码签名证书。有一个关于如何做到这一点,在这里的TechNet信息:http://technet.microsoft.com/en-us/library/cc770315(v=WS.10).aspx,转载这里简单介绍一下:
打开组策略管理控制台。
查找现有的或创建新的GPO以包含证书设置。确保GPO与您希望受策略影响的用户的域,站点或组织单位相关联。
用鼠标右键单击该GPO,然后选择编辑。组策略管理编辑器打开,并显示策略对象的当前内容。
在导航窗格中,打开Computer Configuration \ Windows Settings \ Security Settings \ Public Key Policies \ Trusted Publishers。
单击操作菜单,然后单击导入。
按照证书导入向导中的说明查找并导入证书。
如果证书是自签名的,并且无法追溯到受信任的根证书颁发机构证书存储中的证书,则还必须将该证书复制到该存储。在导航窗格中,单击“受信任的根证书颁发机构”,然后重复步骤5和6以将证书的副本安装到该存储。
除了MikeBazs回答,我想提供下面的“变通办法”,这使的点击,一旦-申请“非互动”和“近乎无声”(用户看到进步的安装-window在安装过程中,无需点击和/或可能)
有几个“问题”的考虑,但如果按照本指南中,结果应该是你所需要的:
1)在您的应用程序中签名:在Visual Studio中,您可以使用自己的证书轻松签署您的应用程序,这不是什么大问题应对。
2)分发证书:为了避免该对话框中,如果要安装该应用程序,您需要将证书分发到以下商店上的任何机(使用GPO为):Trusted Publishers
和Trusted 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秒,仅当用户登录时。
所有用户都会看到的是“安装”进度。
一言以蔽之:
感谢罗宾,这几乎是我的研究向我展示的。这确实是一个要在我的企业环境中部署的软件包。这是我希望我的员工随时可以运行的东西,因此无声安装是首选。 – Joe
无提示安装对网络管理员编写脚本以部署给用户也有帮助。 – Mike
当我的答案是准确的时候,这似乎不公平 - 只是因为你不喜欢答案。 – RobinDotNet