检测Kofax是否启动了自定义模块或用户

检测Kofax是否启动了自定义模块或用户,kofax,Kofax,当自定义模块启动时,我可以使用 if (Environment.UserInteractive) { // Run as WinForms app } else { // Run as service } 在后台服务和WinForms应用程序之间切换。但是我也可以在不启动Kofax的情况下运行.exe文件 是否可以检查Kofax是否启动了该模块?我的示例代码如下所示 if (Environment.UserInteractive) { // Run as WinForms a

当自定义模块启动时,我可以使用

if (Environment.UserInteractive)
{
   // Run as WinForms app
}
else
{
   // Run as service
}
在后台服务和WinForms应用程序之间切换。但是我也可以在不启动Kofax的情况下运行.exe文件

是否可以检查Kofax是否启动了该模块?我的示例代码如下所示

if (Environment.UserInteractive)
{
   // Run as WinForms app

   if (Application.LaunchedByKofax)
   {
      // Do something additional
   }
}
else
{
   // Run as service
}

Kofax Capture启动自定义模块的唯一上下文是当用户尝试从batch Manager处理批时,该批当前在自定义模块的队列中。如果你指的不是这些,那么你需要澄清你的问题

在这种情况下,将使用其他参数调用为自定义模块注册的路径,其中最著名的参数是-B#####,其中####是十进制批处理ID。有关此内容的更多详细信息,请参阅Kofax KB文章,该文章很旧,但仍适用于当前版本

因此,您可以使用这样的函数来检查预期参数

public bool LaunchedFromBatchManager()
{
    var args = Environment.GetCommandLineArgs();

    //args[0] will contain the path to your exe, subsquent items are the actual args
    if (args.Count() > 1)
    {
        // When a user tries to process a batch from batch manager, 
        // it launches the module with -B###, where ### is the decimal batch ID
        // see: http://knowledgebase.kofax.com/faqsearch/results.aspx?QAID=1713
        if (args[1].StartsWith("-B"))
        {
            return true;
        }
    }

    return false;
}

出于好奇,用户不能直接调用CM的exe吗?当然:这三种情况是1。作为服务运行(!Environment.UserInteractive),2。由用户直接启动(Environment.UserInteractive),3由用户通过处理批次管理器(Environment.UserInteractive&&LaunchedFromBatchManager())中的批次启动。这是否回答了问题,还是我忽略了什么?我应该更彻底地阅读。OP已经检查了
环境。UserInteractive
。谢谢你,斯蒂芬!没问题,沃尔夫冈!