【问题标题】:ClickOnce setup behavior different than programmatic behaviorClickOnce 设置行为不同于编程行为
【发布时间】:2013-05-06 12:37:59
【问题描述】:

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

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

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

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

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

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

所以我有一些选择。

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

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

【问题讨论】:

    标签: certificate clickonce


    【解决方案1】:

    所以我解决这个问题的方法是查看应用程序是否已经安装。如果是,则运行 .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
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      相关资源
      最近更新 更多