有没有办法在不提示用户的情况下安装ClickOnce应用程序?我说的是用户第一次运行应用程序时获得的"运行/不运行".
这里似乎有一些线索,但我相信这是关于跳过"提升"(UAC)和安全提示,而不是实际的初始"运行/不运行"屏幕.
我只能找到有关如何静默更新过去安装的应用程序的信息,但没有关于第一次静默安装应用程序的信息.
我也发现这篇文章似乎有关系,但同样,不确定我们是否在谈论相同的用户提示......
可以避免"运行"/"不运行"提示,尽管您仍然存在将文件实际复制到用户的问题,这通常需要他们通过链接启动.application.但是,您可以通过登录脚本或其他方式启动它.大概你已经以某种方式解决了这个问题,因为你的问题暗示了你的问题.你所关联的另一个问题是围绕这个徘徊,但它并没有真正让你一路走来.
我知道您可以绕过"运行"/"不运行"提示,因为我刚刚使用ClickOnce成功完成了它,我们将其部署为自助服务终端机器上的自定义shell.关键是ClickOnce必须由受信任的发布者签名.如果您在客户端计算机上配置了正确的东西,即使是自签名也没问题.
因此,让网络管理员推出一个组策略,该组策略信任用于签署应用程序的代码签名证书.有关如何在TechNet上执行此操作的信息,请访问:http://technet.microsoft.com/en-us/library/cc770315(v = WS.10).aspx,此处简要回顾:
打开组策略管理控制台.
查找现有GPO或创建新GPO以包含证书设置.确保GPO与您希望受策略影响的用户的域,站点或组织单位相关联.
右键单击GPO,然后选择"编辑".组策略管理编辑器打开,并显示策略对象的当前内容.
在导航窗格中,打开"计算机配置\ Windows设置\安全设置\公钥策略\受信任的发布者".
单击"操作"菜单,然后单击"导入".
按照证书导入向导中的说明查找并导入证书.
如果证书是自签名的,并且无法追溯到受信任的根证书颁发机构证书存储中的证书,则还必须将证书复制到该存储.在导航窗格中,单击"受信任的根证书颁发机构",然后重复步骤5和6以将证书的副本安装到该存储.
除了 MikeBazs 答案之外,我还想提供以下“解决方法”,使单击一次应用程序的安装“非交互式”和“几乎无声”(用户在安装过程中看到进度窗口,无需单击必需的和/或可能的)
有一些“问题”需要考虑,但如果您遵循本指南,结果应该是您需要的:
1.)签署您的应用程序:在 Visual Studio 中,您可以轻松地使用自己的证书签署您的应用程序,这没什么大不了的。
2.)分发证书:为了避免出现该对话框,如果应安装应用程序,您需要将您的证书分发到任何计算机上的以下存储(为此使用 GPO):Trusted Publishers以及Trusted 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"
}
Run Code Online (Sandbox Code Playgroud)
现在,用户可以执行该脚本,只需安装一次,无需进一步确认。但应用程序在安装后启动。
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();
}
Run Code Online (Sandbox Code Playgroud)
现在,用户可以执行该脚本,只需安装一次,无需进一步确认,并且应用程序在安装后不会“自动启动”。
但我们也想避免“点击”:
如果我们在启动文件夹中设置 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
Run Code Online (Sandbox Code Playgroud)
最后,使用 GPO 将 vbs 脚本部署到任何用户的启动文件夹中。
用户将看到的只是“安装”进度。
简而言之:
无法在不提示用户的情况下安装 ClickOnce 应用程序。如果您希望用户能够双击它,并且它只是安装而不与用户验证,请不要使用 ClickOnce。坦率地说,根据我的经验,只有在企业环境中通过短信推送的恶意软件和软件包才会安装,而不会向用户发出任何提示。
| 归档时间: |
|
| 查看次数: |
17586 次 |
| 最近记录: |