【问题标题】:ClickOnce application throws Exception from HRESULT: 0x80070002ClickOnce 应用程序从 HRESULT 引发异常:0x80070002
【发布时间】:2018-07-24 00:41:40
【问题描述】:

我有一个 C# WinForm 应用程序,它有时需要重新启动。

当它发生时,它会抛出以下错误:

无效的 dll 或未找到 dll! : MyLib.Dll 系统找不到指定的文件。 (HRESULT 异常:0x80070002)

应用关闭并尝试重新启动后弹出此错误。

此外,仅当应用程序安装在 Windows Server 2008 R2 Standard 上并安装了 Microsoft .NET Framework 4.7 时才会发生这种情况。

请求重启应用的代码是:

ProcessStartInfo = new ProcessStartInfo(); 
Info.Arguments = "/C timeout /T 5 /NOBREAK && \"" + 
Application.ExecutablePath + "\""; 
Info.WindowStyle = ProcessWindowStyle.Hidden; 
Info.CreateNoWindow = true; 
Info.FileName = "cmd.exe"; 
Process.Start(Info); 
Application.Exit(0);

MyLib.dll 存在并且被正确引用。

出现错误信息后,如果我手动启动应用程序,它就可以正常工作。

关于这可能导致此错误的任何线索?

【问题讨论】:

  • 你知道有一个静态的Application.Restart()方法吗?
  • 是的。尝试使用 Application.Restart() 但是当我这样做时,它会抛出一条错误消息,说 App 已经启动。一次只能运行 1 个应用实例。我的想法是它没有完全关闭。
  • 所以,我认为原因相同 - 即使延迟 5 秒后,您的应用程序也没有正确关闭。找出为什么会发生这种情况,一切都会好起来的。
  • 你设置了 Info.WorkingDirectory 吗?
  • 作为一种调试技术,使用Process Monitor 监视用于定位丢失的DLL 的路径。您只需要根据进程名称和文件路径设置一些过滤器。

标签: c#


【解决方案1】:

调查“未找到 DLL”问题的常用技术是使用 tools 监视用于定位丢失 DLL 的位置。

如果 DLL 确实存在于预期位置,例如与可执行文件在同一文件夹中,则问题可能是由于将另一个文件夹设置为工作目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多