Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Certificate ClickOnce设置行为与编程行为不同_Certificate_Clickonce - Fatal编程技术网

Certificate ClickOnce设置行为与编程行为不同

Certificate ClickOnce设置行为与编程行为不同,certificate,clickonce,Certificate,Clickonce,如果我运行应用程序的setup.exe,并且证书不是存储中的受信任证书。我得到以下对话框 只要用户点击安装,一切都很好 现在我有了另一个应用程序Portal,它启动ClickOnce应用程序。 已安装门户并已接受证书(不同的pfx文件) 现在,当门户通过代码启动应用程序1时,不会显示上面的提示(因为它已经在安全上下文中运行了?)。大部分代码来自微软的网站 现在,当应用程序1运行时,会出现错误,即用户拒绝了权限。我理解这是因为用户从未单击过上述警告,应用程序1没有它需要的权限。从Microsof

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

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

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

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

现在,当应用程序1运行时,会出现错误,即用户拒绝了权限。我理解这是因为用户从未单击过上述警告,应用程序1没有它需要的权限。从Microsoft网站:

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

所以我还有一些选择

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

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


    • 所以我解决这个问题的方法是查看应用程序是否已经安装。如果是,则运行.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=\App\setup.exe
      ApplicationLocation=\App\App.application
      
      ApplicationLaunchDirectory = {0}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\App\App.appref-ms
      ApplicationSetupDirectory = <NetworkDrive>\App\setup.exe
      ApplicationLocation = <NetworkDrive>\App\App.application