1

我在 microsoft/azuredatastudio github 存储库中工作,该存储库主要来自 vscode。我正在尝试扩展我们的命令行处理以处理窗口重用参数,这样如果我们将服务器连接与 -r 一起传递,我们将打开指定的连接。我们当前的命令行处理服务是通过 Workbench.initServices 中的 src\vs\workbench\electron-browser\workbench.ts 加载的。

是否有任何平台提供的服务对电子主和工作台\电子浏览器都是可见的,我可以修改或利用这些服务来通知应用程序正在使用新的命令行参数重用?

我发现在 src\vs\code\electron-main\launch.ts 中定义的 LaunchService 似乎负责捕获参数并打开或重用窗口,但不清楚我将如何编组来自 LaunchService 的通知转到我们由工作台加载的服务。

2/12/2019 更新:看起来我需要在 src\vs\code\electron-main\windows.ts 中添加一个等效的函数

    private doOpenFilesInExistingWindow(configuration: IOpenConfiguration, window: ICodeWindow, filesToOpen: IPath[], filesToCreate: IPath[], filesToDiff: IPath[], filesToWait: IPathsToWaitFor): ICodeWindow {
    window.focus(); // make sure window has focus

    window.ready().then(readyWindow => {
        const termProgram = configuration.userEnv ? configuration.userEnv['TERM_PROGRAM'] : void 0;
        readyWindow.send('vscode:openFiles', { filesToOpen, filesToCreate, filesToDiff, filesToWait, termProgram });
    });

    return window;
}

其中有一条新消息,例如 'ads:openconnection' 。现在来了解如何处理消息。

4

1 回答 1

0

我最终使用了 ipcRenderer 服务,并在 main.js 中向启动服务添加了一个 ipc 调用。

    // {{SQL CARBON EDIT}}
    // give the first used window a chance to process the other command line arguments
    if (args['reuse-window'] && usedWindows.length > 0 && usedWindows[0])
    {
        let window = usedWindows[0];
        usedWindows[0].ready().then(() => window.send('ads:processCommandLine', args));
    }
    // {{SQL CARBON EDIT}}
于 2019-02-18T17:43:12.687 回答