【问题标题】:How to demand a running process to open a file?如何要求正在运行的进程打开文件?
【发布时间】:2011-04-13 09:05:19
【问题描述】:

我知道如何在 C# 的新进程中启动文件(例如,在新的 Word 进程窗口中打开 .doc 文件)。

但是,如何在“正在运行”的进程中打开文件?比如我已经有一个正在运行的Word进程,如何要求它从C#程序中打开一个文件?

我在互联网上搜索过,但不知道。 :(

【问题讨论】:

  • 我认为您可以以某种方式使用 DDE。我认为这就是资源管理器向正在运行的 ups 发送消息以告诉他们打开某个文件的方式。

标签: c# .net file process


【解决方案1】:

您可以使用Marshal 类中的GetActiveObject 方法获取单词的活动/现有实例。

Word.Application wordApp = (Word.Application)Marshal.GetActiveObject("Word.Application");

其他一切都与创建新单词实例时相同。

编辑:

Word.Application 是“Microsoft.Office.Interop.Word.dll”的一部分,因此您需要将此引用添加到您的项目中。

如果你不想使用早期绑定(添加引用),那么你可以通过后期绑定来做到这一点。你可以看看这个例子:Binding for Office automation servers with Visual C# .NET

【讨论】:

  • 嗨,Habjan,我认为这是为了创建一个新的文字处理,但是如何让“正在运行”的文字处理打开一个文件?
  • 这是一个非常具体的例子,它在 Word 上创建了依赖关系。
  • @Phanix:GetActiveObject 会让你运行实例。描述说:从运行对象表(ROT)中获取指定对象的运行实例。
  • @Jonas Van der Aa:“创建依赖项”是什么意思?
  • @Jonas:那将是一个没有实际意义的问题。目标是让 Word 打开一个文档。这不是对 Word 的相当严格的依赖吗:)
【解决方案2】:

没有通用技术可以为您做到这一点。某些应用程序可能允许您从命令行指定额外参数或在某处设置选项。

如果您需要此功能用于特定应用程序,我建议您为该应用程序寻找 API。 Word 本身有一个围绕它的 COM API 的托管包装器。

【讨论】:

  • 这是正确的。每个应用程序的做法都不同。查找 DDE 并开始深入研究不同文件类型的注册表,以查看命令通常的样子。
【解决方案3】:

ShellExecute equivalent in .NET

ShellExecute 就是你想要的。

ShellExecute 是具有所需行为的 Win32 API。它只是隐藏在 .NET 的 ProcessStartInfo.UseShellExecute 后面。

或在 SO 之外:

http://www.vbforums.com/archive/index.php/t-257526.html

【讨论】:

  • 不要吹毛求疵,但你不是说“Process.Start 是你想要的”吗?
  • 并非如此。 ShellExecute 是具有所需行为的 Win32 API。它只是隐藏在 .NET 的 ProcessStartInfo.UseShellExecute 后面;我明确地将其称为 ShellExecute,这样我就不会被忽视
  • @sehe 是的,就像这样:ShellExecute bla-bla-bla。 ShellExecute 是你想要的。 ShellExecute rubble-rubble-rubble... 我提到过 ShellExecute 吗?
【解决方案4】:

如果你使用 Process.Start("mydoc.doc"),那么如果有一个现有的 Word 进程,它将被重用。 根据MSDN

如果进程已在运行,则不会启动其他进程。而是重用现有的流程资源,并且不会创建新的流程组件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多