如何解决阻止 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。
在纠结这个错误很久之后,我:
遵循 advise of this thread 并且我从头开始创建了完全不同的 solution/projects,并且我将所有文件(.cs、表单、资产...)复制到新的。
调整了命名空间并安装了所需的 Nuget 包和引用。
像往常一样用创建测试证书签署了ClickOnce 清单,但几分钟后我changed the duration of .pfk key to several years;它必须在它过期之前完成,我肯定会忘记;所以,按顺序做,因为如果之后,根本没有效果...
我回到游戏中,再次发布!
PS: 我再也不会让临时证书过期了...
背景:
我在使用 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。
在纠结这个错误很久之后,我:
遵循 advise of this thread 并且我从头开始创建了完全不同的 solution/projects,并且我将所有文件(.cs、表单、资产...)复制到新的。
调整了命名空间并安装了所需的 Nuget 包和引用。
像往常一样用创建测试证书签署了ClickOnce 清单,但几分钟后我changed the duration of .pfk key to several years;它必须在它过期之前完成,我肯定会忘记;所以,按顺序做,因为如果之后,根本没有效果...
我回到游戏中,再次发布!
PS: 我再也不会让临时证书过期了...