启动应用程序时有时会出现FileNotFoundException错误

4
为了自动更新我的WPF应用程序,我有以下策略:
(1) process.exe 启动 process.exe 寻找更新 => 发现有更新 process.exe 复制自身 => process_copy.exe process.exe 使用 "update" 参数启动 process_copy.exe process.exe 退出
(2) process_copy.exe 启动 process_copy.exe 发现 "update" 参数,将更新下载到 process.exe process_copy.exe 启动 process.exe process_copy.exe 退出 process.exe 启动
请注意,我的应用程序使用一个 dll。
这个策略是有效的,但有时候(不是每次),当应用程序在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 中启动时会崩溃。
有时它会在 (2) 处崩溃,并显示以下错误信息:
System.IO.FileNotFoundException was unhandled Message="Could not load file or assembly 'ManagedWinapi, Version=0.3.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
我不明白为什么会崩溃。如果它能在 (1) 中启动,为什么不能在 (2) 中启动(有时候)?
有人能解释一下吗?
感谢您提前的回答。

你不能使用ClickOnce的原因是什么? - Dour High Arch
原因是它是一个非常简单的应用程序,不需要大型更新系统。 但我不明白为什么它会出现FileNotFoundException,而文件却在这里... - Tim
使用ClickOnce似乎比制作自己的更新系统要简单得多... - Benny Jobigan
3个回答

0
最终,我已经将这个dll集成到我的应用程序中了,所以我不再有dll了...虽然很丑但是能用。

0

选项0:你知道“ManagedWinapi”的依赖关系吗?如果不知道,可以使用Reflector来确定。可能有一个依赖项无法找到?

选项1:尝试运行ProcessMonitor来确定你的应用程序偶尔缺少什么具体内容。(“或其任何依赖项”-这可能是任何数量的事情)。

选项2:这是一个间歇性的问题。你的复制操作是异步的吗?或者你绝对确定“process_copy.exe”加上你可能正在复制的其他组件已经更新了吗?


0
尝试使用AppDomain.CurrentDomain.AssemblyResolve事件来查看它正在寻找哪个文件以及在哪里寻找。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接