如何解决阻止 clickonce 应用程序启动的错误

How to solve the error that prevents clickonce app to start

背景:

我在使用 ClickOnce WindowsForms NET 4.8 应用程序时遇到问题,该应用程序现在由具有 2 个项目的解决方案组成。 一切都是在自动生成的证书在 2 年后过期后开始的。我不知道它是否相关,但一开始它只是一个项目,我分成两个并为两个使用相同的生成密钥。

所以,我在签名选项卡上生成了新的,带有创建测试证书(希望我知道旧的延长寿命......但现在它被删除了)并且因为它们是两个项目,有 2 个应用程序(但我使用的是另一个模型和服务)我为每个生成了一个测试证书。

在“签名”选项卡中,选中了对 ClickOnce 清单进行签名的选项,但未选中对程序集进行签名(之前都没有)。

我可以正常构建,运行,调试和使用;但是,如果尝试发布到与收到消息之前相同的位置:

应用程序使用与现有密钥不同的密钥进行签名 服务器上的应用程序。要覆盖吗?

因为还在开发阶段,所以没在意,直接重写了。

当前问题:

应用程序已发布,但未启动,也没有提供任何线索或消息。

在 Program.cs 我当然有:

        Static async Task Main()
        {
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.ThreadException += ApplicationOnThreadException;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
       //...
       }

我是如何调查的:

所以,我更改了我的输出文件夹,当然没有更多 ...应用程序使用与 ... 不同的密钥进行签名,但应用程序仍然没有启动并没有给出消息。在另外两台 Windows 10 台 PC 中的行为相同。 我正在使用 VS 2022 64 位和 Windows 10,两者都一如既往地完全更新。

看到this后我改成创建没有清单的应用程序无济于事。

我转到事件查看器控制台,有两条错误消息,时间戳相同:

第一个是:

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name=".NET Runtime" /> 
  <EventID Qualifiers="0">1026</EventID> 
  <Version>0</Version> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2022-03-18T14:52:57.3515638Z" /> 
  <EventRecordID>226871</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="0" ThreadID="0" /> 
  <Channel>Application</Channel> 
  <Computer>Computer-NAME</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>Application: applaunch.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Information: exception code e0434352, exception address 00007FFA01334F69 Stack:</Data> 
  </EventData>
  </Event>

第二个:

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Application Error" /> 
  <EventID Qualifiers="0">1000</EventID> 
  <Version>0</Version> 
  <Level>2</Level> 
  <Task>100</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2022-03-18T14:52:57.5775648Z" /> 
  <EventRecordID>226872</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="0" ThreadID="0" /> 
  <Channel>Application</Channel> 
  <Computer>Computer-NAME</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>applaunch.exe</Data> 
  <Data>4.8.4084.0</Data> 
  <Data>5dda4211</Data> 
  <Data>KERNELBASE.dll</Data> 
  <Data>10.0.19041.1566</Data> 
  <Data>0833f2d4</Data> 
  <Data>e0434352</Data> 
  <Data>0000000000034f69</Data> 
  <Data>13368</Data> 
  <Data>01d83ad7dade31c5</Data> 
  <Data>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\applaunch.exe</Data> 
  <Data>C:\WINDOWS\System32\KERNELBASE.dll</Data> 
  <Data>507e79be-c718-4d23-bab8-f153b4601c3b</Data> 
  <Data /> 
  <Data /> 
  </EventData>
  </Event>

最后,我取消选中签署 ClickOnce 清单;行为保持不变,事件查看器中的原始错误消息也是如此。

如果我理解正确,由于 none 我的全局错误处理程序捕获了它,我假设错误在我的任何代码加载到内存之前就已经触发,并且它与证书有关改变,但我不确定。我迷失了如何进一步调查它。有什么方向吗?

TIA

编辑 1: 为了进一步调查,我启用了冗长的 installation.log 作为 per these instructions。 令我惊讶的是,功能版本(使用未过期密钥发布)和新版本(使用新密钥)输出相同的 installation.log。有了这些令人厌烦的信息,我转到了 Published 文件夹 (%AppData%\Local\Apps.0...),令我更加惊讶的是,我不仅可以实例化操作应用程序——在显示的版本号方面具有不同的行为——而且可以启动已发布文件夹中丢失的新版本应用程序。

是的,我 correct filled Publisher name and Product name

在纠结这个错误很久之后,我:

  1. 遵循 advise of this thread 并且我从头开始创建了完全不同的 solution/projects,并且我将所有文件(.cs、表单、资产...)复制到新的。

  2. 调整了命名空间并安装了所需的 Nuget 包和引用。

  3. 像往常一样用创建测试证书签署了ClickOnce 清单,但几分钟后我changed the duration of .pfk key to several years;它必须在它过期之前完成,我肯定会忘记;所以,按顺序做,因为如果之后,根本没有效果...

  4. 我回到游戏中,再次发布!

PS: 我再也不会让临时证书过期了...