杀死 Winword 的特定实例

发布于 2024-10-10 21:27:53 字数 219 浏览 2 评论 0原文

我的应用程序创建了一个嵌入 Windows 窗体中的 winword 的新实例。

new Microsoft.Office.Interop.Word.ApplicationClass()

用户完成编辑后,我关闭窗口,但 winword 实例仍在后台运行。

我怎样才能杀死那个特定的实例?我知道如何杀死机器上运行的所有实例,但这不是一个选择。

my application creates a new instance of winword embedded in a windows form.

new Microsoft.Office.Interop.Word.ApplicationClass()

Once the user finishes editing I close the window but the winword instance is still running in the background.

How can I kill that particular instance? I know how to kill all instances running on a machine but this isn't an option.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

未央 2024-10-17 21:27:53

您需要

application.Quit()

在代码中调用。

我必须在我的系统(它是一个 Excel 处理工具)上做的一件事是,如果退出后事情仍在继续,则执行进程终止。

var openedExcel = System.Diagnostics.Process.GetProcessesByName("EXCEL");
            if (openedExcel.Any())
            {
                foreach (var excel in openedExcel)
                {
                    try { excel.Kill(); }
                    catch { }
                }
            }

You need to call

application.Quit()

In your code.

One thing I had to do on my system (it's an excel processing tool) is do a process kill if after the Quit things were still going on.

var openedExcel = System.Diagnostics.Process.GetProcessesByName("EXCEL");
            if (openedExcel.Any())
            {
                foreach (var excel in openedExcel)
                {
                    try { excel.Kill(); }
                    catch { }
                }
            }
自在安然 2024-10-17 21:27:53

为此有不同的方法(我认为Marshal.ReleaseComObject是最常用的方法)。

我建议您阅读有关发布Office应用程序实例的官方文档。它可以在这里找到:Microsoft Office 的 Microsoft .NET 开发/ 释放 COM 对象

There are different methods for this (Marshal.ReleaseComObject is the most used I believe).

I suggest you should read the official documentation about releasing Office applications instances. it's available here: Microsoft .NET Development for Microsoft Office / Releasing COM Objects

风尘浪孓 2024-10-17 21:27:53

我建议您将以下代码组合/添加到 Flaviotsf 的答案中 - 这将确定正在运行的实际进程:

Process[] myProcList = Process.GetProcesses();
for (int i = 0; i <= myProcList.Length - 1; i ++) {
    string strProcessName = myProcList [i].ProcessName;

    string strProcessTitle = myProcList [i].MainWindowTitle();
         //check for your process name. 
    if (strProcessName.ToLower().Trim().Contains("access")) {

       myProcList [i].Kill();
    }
}

I Suggest you combine / add to Flaviotsf's answer the following code - which will determine what actual process is on the run:

Process[] myProcList = Process.GetProcesses();
for (int i = 0; i <= myProcList.Length - 1; i ++) {
    string strProcessName = myProcList [i].ProcessName;

    string strProcessTitle = myProcList [i].MainWindowTitle();
         //check for your process name. 
    if (strProcessName.ToLower().Trim().Contains("access")) {

       myProcList [i].Kill();
    }
}
日久见人心 2024-10-17 21:27:53

杀死 Winword Document 的特定实例。

foreach (var process in Process.GetProcessesByName("WINWORD"))
{
   if (process.MainWindowTitle.Contains("Temp")) // Temp is document name.
    process.Kill();
}  

Kill particular instance of Winword Document.

foreach (var process in Process.GetProcessesByName("WINWORD"))
{
   if (process.MainWindowTitle.Contains("Temp")) // Temp is document name.
    process.Kill();
}  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文