【问题标题】:Windows 10 cannot associate file to clickonce applicationWindows 10 无法将文件关联到 clickonce 应用程序
【发布时间】:2016-09-30 10:59:48
【问题描述】:

我有一个在 Windows 7 上运行良好的 clickonce 应用程序。 当它安装在 Windows 10 机器上时,我们的应用程序的特定文件似乎无法正确关联到 clickonce 应用程序。

如果我在文件上单击鼠标右键,然后选择“打开方式”,我可以在“ClickOnce 应用程序部署支持库”列表中看到。但如果我选择此选项,我会收到一条消息,提示“此应用程序无法在您的 PC 上执行”。如果我决定直接选择 clickonce 应用程序的 .exe 文件(C:\Users\xxx\AppData\Local\Apps...),它将无法正常工作(版本和更新检测)。

我能够安装我的应用程序,并且能够从开始菜单正确运行它。唯一不起作用的是文件关联。我已经尝试卸载并重新安装,但它并没有改变任何东西。

编辑: 我已经在另一台 Windows 10 机器上安装了该应用程序,并且一切正常(包括文件关联“在安装时自动和手动指定时”)。所以我认为问题不是所有 Windows 10 机器的“通用”问题。

【问题讨论】:

    标签: windows-10 clickonce


    【解决方案1】:

    我能够重现 montueron 的问题。打开日志记录 (https://msdn.microsoft.com/en-us/library/dd996997.aspx) 并设置日志记录位置 (https://msdn.microsoft.com/en-us/library/ms404265.aspx) 后,我能够确定文件关联被跳过:“.tiff”的文件关联被跳过,因为另一个应用程序正在使用它。

    这是我在 Windows 10 上解决问题的方法。我的目标是将 ClickOnce 程序“Tif2PDF”与 .TIF 和 .TIFF 图像文件相关联。

    1. 在 Visual Studio 2017 的 ClickOnce 发布设置中创建一个唯一的文件关联。我目前没有使用 .TIF,我们只想在 HKCU\Software\Classes\Tif2PDF 下创建适当的注册表项,该注册表项将在卸载过程。

      Properties->Publish->Options->File Associations.
      extension=.tif2pdf
      description=Tif2PDF
      progID=Tif2PDF
      icon=Resources\Tif2PDF.ico
      
    2. 在Tif2PDF程序启动过程中,我们需要在安装时添加注册表设置——更新时才运行:

      if ( System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
                     && ApplicationDeployment.CurrentDeployment.IsFirstRun )
      
      Computer\HKEY_CURRENT_USER\Software\GuardTech\PDFTool\Capabilities\FileAssociations
      .tif="Tif2PDF"    
      .tiff="Tif2PDF"
      

    这两个条目告诉 Windows 使用 HKCU\Software\Classes\Tif2PDF 条目来处理 TIF 和 TIFF 文件类型。

    1. 告诉 Windows 这是一个已注册的应用程序。该值指向第 2 步中创建的键。

      Computer\HKEY_CURRENT_USER\Software\RegisteredApplications
      Tif2PDF="Software\Tif2PDF\Capabilities"
      

    此时,您应该在 Windows 资源管理器中的“打开方式”下看到一个名为“ClickOnce 应用程序部署支持库”的选项。它现在可以工作了,但是让我们添加一个标签和图标。

    1. 在下面创建键和值。

      string iconSourcePath == Path.Combine(System.Windows.Forms.Application.StartupPath, @"Resources\Tif2PDF.ico");
      Computer\HKEY_CURRENT_USER\Software\Classes\Tif2PDF\Application
      ApplicationIcon=iconSourcePath
      ApplicationName="Tif2PDF"
      
    2. 你的程序需要处理命令行参数有点不同

      //Get the normal command lines arguments in case the EXE is called directly
      List<string> argList = new List<string>(Environment.GetCommandLineArgs());
      argList.RemoveAt(0); //Remove the application.EXE entry
      
      // this is how arguments are passed from windows explorer to clickonce installed apps when files are associated in explorer
      if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments?.ActivationData != null )
      {
      argList.AddRange( AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData);
      }
      
    3. 我们应该在卸载程序时尝试清理这些注册表设置,按照thedracle的帖子Custom action on uninstall (clickonce) - in .NET

    【讨论】:

      【解决方案2】:

      我刚刚以管理员身份使用 Visual Studio 2015 创建了一个测试应用程序(Windows 窗体应用程序)(

      1) 在 Properties/Publish/Options/File Associations 下添加了一个条目:

      扩展名:.abcd

      描述:测试

      程序 ID:2

      图标:一个图标文件

      2) 在 Properties/Publish 我按下 Publish Now 并运行 Setup

      3) 创建一个文本文件,将其重命名为 test.abcd

      它在 Windows 10 下按预期工作,因此您可以创建一个测试应用程序/验证它是否正常工作,并查看与现有应用程序相比有何不同。32/64 位、框架、签名等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多