Windows C ++:如何从父桌面应用程序“断开”子进程

时间:2017-11-22 16:16:08

标签: c++ excel windows winapi

我有以下main.cpp用于创建Excel应用程序的C ++桌面应用程序(控制台或DLL):

#include "stdafx.h"

#include <comutil.h>
#include <stdio.h>

#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib, "kernel32.lib")

#import \
"C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\mso.dll" \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("RGB", "RBGXL")

#import \
"C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"

#import "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" \
rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("ReplaceText", "ReplaceTextXL") \
rename("CopyFile", "CopyFileXL") \
exclude("IFont", "IPicture") no_dual_interfaces

using namespace std;

int main()
{
    Excel::_ApplicationPtr XL;
    try
    {
        //Initialise COM interface
        CoInitialize(NULL);
        //Start the Excel Application
        XL.CreateInstance(L"Excel.Application");
        //Make the Excel Application visible
        XL->Visible = true;
    }
    //If a communication error is thrown, catch it and complain
    catch (_com_error &error)
    {
        cout << "COM error" << endl;
    }
    Sleep(2000);
    return 0;
}
事实是,一旦主函数完成,新的Excel进程就会退出(由于Sleep(2000);,我可以看到窗口2秒钟。)

我发现使用exit(1);会阻止Excel App最终退出。但是有另一种方法将子进程与父控制台进程“分离/断开”吗?我在UNIX中找到了这个,但是在我的情况下我无法使它工作:Detach child process from parent

另外,我刚刚发现,如果创建一个DLL(不是控制台应用程序),使用exit(1);退出Excel应用程序,该应用程序在启动新应用程序之前调用DLL的主要功能。这不是我想做的。 (甚至看起来这个过程变成了僵尸)

0 个答案:

没有答案