0

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

安全警告

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

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

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

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

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

所以我有一些选择。

  • 获取有效证书。现在对于这些应用程序,我们无法证明两年大约 400 美元的成本是合理的。我正在考虑创建我们自己的证书,但是,将证书部署到内部客户端计算机是网络团队可能会感到满意的事情。将证书添加到整个公司的受信任根中涉及的内容。

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

4

1 回答 1

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
于 2013-05-07T20:47:10.820 回答