1

我的应用程序在其 .exe.config 中需要useLegacyV2RuntimeActivationPolicy,因为它是一个使用混合模式 CLR2 程序集的 CLR4 应用程序。

从“开始”菜单启动我们的应用程序时一切正常,但是如果用户通过单击与我们的应用程序具有文件类型关联的文件之一来启动我们的应用程序,则不会读取 app.config 文件并加载这些文件CLR2 程序集失败。

根据进一步的研究,ShellExecute 似乎不会读取 .config 文件(即使指定了 app 文件夹),但 WinExec 会。我认为 shell 使用 ShellExecute 通过文件关联来启动应用程序。

除了在启动主应用程序的进程之前编写一个设置当前文件夹的中间应用程序之外,还有什么解决方法吗?这是在本网站的其他地方提出的。

提前致谢!

4

1 回答 1

0

检查文件关联注册表设置是否使用长文件名而不是短文件名。例如,command这里的值应该使用长文件名来打开文档。

HKEY_CLASSES_ROOT\MyFile.Document\shell\open\command

我的猜测是 Windows 在启动应用程序时不会将短文件名扩展为长名,并尝试使用短名来解析 app.config 文件,然后它无法找到该文件。

编辑:我通过在注册表中找到匹配的短名称重命名 app.config 来确认我的理论,然后它就起作用了。再次删除重命名的 app.config 文件会破坏它。

于 2011-12-15T14:06:28.937 回答