【问题标题】:Starting an external 4.0 process from a 2.0 application从 2.0 应用程序启动外部 4.0 进程
【发布时间】:2012-01-26 19:23:21
【问题描述】:

有人提到使用 2.0 应用程序中的 4.0 库,使用 COM 互操作。我的要求略有不同,因为我不想向我的 2.0 应用程序公开类型,但我在 2.0 应用程序中有一个 Diagnostics.Process.Start(....) 命令,到目前为止,它在其他地方启动了一个外部 EXE在 2.0 框架下编译的本地驱动器。

外部 EXE 已升级为使用框架 4.0,Diagnostics.Process.Start 不再工作,似乎是这个原因。

我尝试更改.csproj文件下的框架类型为调用的EXE,重新编译并尝试过,但仍然没有乐趣,不确定现在它是否在VS2010下它被不可逆转地更改为不再与2.0兼容.我不会认为这会是一个问题,就像我说我没有在库中调用类型,我只是使用 Diagnostics.Process.Start 来启动外部 EXE,这肯定与框架的版本无关是编译下的吗?

有没有人经历过这样的事情?

【问题讨论】:

  • Process.Start() 根本不关心启动进程所需的资源。 “它不起作用”不是恰当的问题描述。

标签: c# .net c#-4.0 interop c#-2.0


【解决方案1】:

如果您要为 4.0 可执行文件启动一个全新的进程,那么框架版本应该是无关紧要的。这两个过程在不同的环境中是分开的。您能否指定尝试启动新的 4.0 EXE 时遇到的错误?

如果在新项目中将目标框架更改为 2.0 也失败了,我猜它是另一回事。可能是代码访问安全性,还是一般权限?

编辑:如果您没有收到明确的错误消息,而只是看到您的 4.0 EXE 启动和关闭而没有警告,请尝试使用 ProcMonDbgView 等工具来捕获意外消息,或添加对 System.Diagnostics 的调用.Debugger.Attach() 在您的 4.0 进程的主入口点,进入调试并查看发生了什么。

【讨论】:

  • 感谢有关调试的提示,它们将来会很有用。事实证明,问题在于 Process.Start(app, params) 被称为 Process.Start(App.pathname + " ", params),即在应用程序名称的末尾有一个多余的额外空格。出于某种原因,当启动在 VS2005 中编译的项目时,它并不关心额外的空间,但是当您将项目升级到 VS2010 时,它不再使用额外的空间启动。很奇怪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2013-08-22
  • 1970-01-01
  • 2011-08-03
  • 2019-07-05
  • 1970-01-01
相关资源
最近更新 更多