ClickOnce设置行为与程序行为不同

时间:2013-05-06 12:38:00

标签: certificate clickonce

如果我运行应用程序的setup.exe,并且证书不是商店中的可信证书。我得到以下对话框。

Security Warning

只要用户点击安装,一切都很好。

现在我有另一个应用程序Portal,它启动ClickOnce应用程序。 Portal已安装并已接受证书(不同的pfx文件)。

现在当Portal通过代码启动应用程序1时,上面的提示不会显示(因为它已经在安全上下文中运行了?)。大部分代码来自微软网站的InplaceHostingManager

现在,当应用程序1运行时,会收到用户拒绝权限的错误。我理解这一点是因为用户从未点击过上述警告,因此应用程序1没有所需的权限。来自微软的网站:

  

如果应用程序使用可信应用程序部署,则使用公共语言运行时     (CLR)信任管理器检查部署清单以确定它是否包含     有效的信任许可证。如果部署清单不包含有效信任     许可证,ClickOnce停止安装并抛出TrustNotGrantedException。     更新将永远不会显示询问用户是否要授予的提示     应用程序运行权限。

所以我留下了一些选择。

  • 获取有效证书。现在,对于这些应用程序,我们无法证明两年内约400美元的成本。我正在研究创建自己的,但是,将部署到内部客户端计算机的证书放到网络团队可能会感到满意的程度。在将证书添加到整个公司的受信任根目录时调用了什么。

  • 或以某种方式检测应用程序是否已安装。如果没有,请调用setup.exe。如果运行,则运行现有的部署代码。如何确定是否已安装应用程序?

1 个答案:

答案 0 :(得分:0)

所以我解决这个问题的方法是查看该应用程序是否已安装。如果是,则运行.application文件,如果没有运行setup.exe文件,就好像用户点击它一样。

If (Not System.IO.File.Exists(String.Format(app.ApplicationLaunchDirectory, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)))) Then
     Process.Start(app.ApplicationSetupDirectory)
Else
     Dim deploymentUri As New Uri(app.ApplicationLocation)
     inPlaceHosting = New InPlaceHostingManager(deploymentUri, False)
     appInfo = app
     pf.SetValues("Starting Application", 0)
     pf.Show()
     inPlaceHosting.GetManifestAsync()
End If

其中

ApplicationLaunchDirectory = {0}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\App\App.appref-ms
ApplicationSetupDirectory = <NetworkDrive>\App\setup.exe
ApplicationLocation = <NetworkDrive>\App\App.application