通过Google Chrome本机消息传递检测exe何时启动

时间:2013-11-13 18:51:24

标签: c# .net google-chrome google-chrome-extension message-passing

我正在尝试改造现有的NPAPI插件,以使用Google的native message passing技术。由于它是一个现有的exe,我们已经编写了一些控制台行为,以便用户可以从终端调用我们的程序。在C#应用程序中,我们有什么方法可以检测到Google Chrome已经启动了用于邮件传递的exe吗?如果我们可以这样做,我们可以启动消息传递循环,如果我们从Chrome调用,但如果从Powershell / cmd调用则恢复正常行为。

我已经尝试检查Chrome启动时传递给程序的命令行参数,但没有。有一个可配置的选项,我们可以解决这个问题,但据我所知,这是不可能的。我还没有机会检查当前的工作目录,以防它也可以用作标识符。

3 个答案:

答案 0 :(得分:2)

实际上,是的,我相信这是可能的。

例如,当C#控制台应用程序作为本机消息客户端主机启动时,会传递两个参数:

--parent-window=<number>

chrome-extension://<extension identifier>/

我认为第二个论点可能是确定Chrome不仅启动了该流程的理想选择,而且您创作并打算称之为的特定扩展程序已启动它!

请在上面注明“&lt;”和“&gt;”并不是字面上的参数的一部分,只是用来表示消息部分的开头和结尾,就像双引号一样。

Chrome Native Host

或者,只需让您的扩展程序调用将特殊参数传递给本机主机的脚本(.bat,.sh等)。这样你就可以传递你自己的特定参数。

答案 1 :(得分:0)

API不支持传递命令行参数,但您的主机进程应该能够检查自己的父进程,以确定它是由Chrome还是其他人启动的。

答案 2 :(得分:0)

检查@aikeru建议的参数的另一种方法是检查是否存在从Chrome传递到本机消息传递主机的某些环境变量。我的主机有以下似乎特定于Chrome的变量(在Sysinternals Process Monitor中找到):

CHROME_ALLOCATOR=TCMALLOC
CHROME_BREAKPAD_PIPE_NAME=\\.\pipe\GoogleCrashServices\S-1-5-18
CHROME_MAIN_TIME=13037817851797830
CHROME_METRO_DLL=0
CHROME_PRE_READ_EXPERIMENT=100-pct-default
CHROME_RESTART=Google Chrome|Whoa! Google Chrome has crashed. Relaunch now?|LEFT_TO_RIGHT
CHROME_VERSION=33.0.1750.117