3

プロセスが現在のアプリケーションによって呼び出されたかどうかを判断する方法はありますか? Excel Interop プロセスを開いたり、ファイルを処理したりしています。その後、呼び出したこの Excel プロセスだけを閉じたいと思います。

このようなもの:

Process[] pProcess = System.Diagnostics.Process.GetProcessesByName("Excel");
                foreach (var process in pProcess)
                {
                    if (process.Parent == "MyApp.exe") process.Kill();
                }
4

2 に答える 2

0

使用法:

Console.WriteLine("ParentPid: " + Process.GetProcessById(6972).Parent().Id);

コード:

public static class ProcessExtensions {
private static string FindIndexedProcessName(int pid) {
    var processName = Process.GetProcessById(pid).ProcessName;
    var processesByName = Process.GetProcessesByName(processName);
    string processIndexdName = null;

    for (var index = 0; index < processesByName.Length; index++) {
        processIndexdName = index == 0 ? processName : processName + "#" + index;
        var processId = new PerformanceCounter("Process", "ID Process", processIndexdName);
        if ((int) processId.NextValue() == pid) {
            return processIndexdName;
        }
    }

    return processIndexdName;
}

private static Process FindPidFromIndexedProcessName(string indexedProcessName) {
    var parentId = new PerformanceCounter("Process", "Creating Process ID", indexedProcessName);
    return Process.GetProcessById((int) parentId.NextValue());
}

public static Process Parent(this Process process) {
    return FindPidFromIndexedProcessName(FindIndexedProcessName(process.Id));
}
}

ソース:https ://stackoverflow.com/a/2336322/706867

于 2012-06-12T13:36:46.237 に答える
-1

Excel-Interop-Process への参照を保持し、必要なことを行った場合はそれを強制終了できます...

この例を見てください:

static void Main(string[] args)
    {
        var excelApp = new Microsoft.Office.Interop.Excel.Application();
        var workbook = excelApp.Workbooks.Open(Filename: @"someexcelworkbook.xls");
        workbook.Activate();
        excelApp.Visible = true;
        excelApp.Quit();
    }

これが役立つことを願っています.. ;-)

于 2012-06-08T13:27:09.703 に答える