从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误

Posted

技术标签:

【中文标题】从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误【英文标题】:Running C++ app from C# process running on Mono. run-detectors error 【发布时间】:2015-12-16 14:26:13 【问题描述】:

我目前正在将一个工具移植到 Linux。我正在为此使用单声道,并且已经运行了主要工具。但是,此工具调用另一个程序,该程序是用 C++ 编写的,并在 Linux 上使用 g++ 本地编译。我在移植它时遇到了很多困难,但是让它工作并运行(使用 ./othertool.exe 按预期运行)。

但是,当尝试在 Mono 上运行原始工具时,它无法启动另一个工具,并出现错误。

run-detectors: unable to find an interpreter for .../othertool.exe

我不确定为什么会发生这种情况,因为在使用 hello world 进行测试时,我设法通过在 Mono 上从 C# 调用 C++ 程序来运行它。我正在使用 Process 类(参见代码)运行另一个工具,该类与 hello world 示例配合得很好。

var process = new Process

    StartInfo =
    
        FileName = baseDir +
                   Path.DirectorySeparatorChar +
                   "tools" +
                   Path.DirectorySeparatorChar +
                   "othertool.exe",
        Arguments = arguments.ToString(),
        UseShellExecute = false
    
;

process.Start();
process.WaitForExit();

有人知道为什么会这样吗?谷歌没有产生任何东西,所以我想这可能并不常见。随意询问更多信息或澄清,因为我可能遗漏了一些东西。

【问题讨论】:

使用mono 作为您的filename 并将基于CIL (exe) 的程序集作为参数传递 不是CIL,其他工具是在linux上用g++原生编译的。我在问题中添加了这个。 othertool.exe 是本机 c++/c 可执行文件吗?您是否注册了.exe 内核/外壳扩展?如果是这样,请尝试从文件中删除 .exe 扩展名。 这没什么区别。 hello world 示例在编译为 .exe 的 c++ 程序时运行良好。 假设您使用的是 Linux disto(如Ubuntu)支持启动 PE 格式但没有安装 Wine 之类的东西,你会失败。恕我直言:在 Linux 上将非 PE/非 CIL 文件命名为 .exe 是错误的形式... 【参考方案1】:

好吧,结果我不知何故使用的是 Windows 构建的 othertool 版本,而不是 Linux 版本。谁让这种事发生?使用正确的时运行“正常”。 ——卡梅隆

很酷,运行检测器/解释器故障通常(总是?)与 PE 可执行文件(.exe)问题(和其他非 Linux 二进制文件)有关,假设您使用的是支持启动的 Linux disto(如 Ubuntu) PE 格式但没有安装 Wine 之类的东西,你会失败。恕我直言:在 Linux 上将非 PE/非 CIL 文件命名为 .exe 是错误的形式...... – 寿司宿醉

【讨论】:

以上是关于从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Mono 中将 C++ 暴露给 C#:函数的无效转换?

HttpListener 在 Mono 上运行良好吗?

通过单声道将数组从 C++ 传递给 C#

使用 Mono 的 C# 代码中的间歇性 SIGSEGV (segfault)、SIGABRT 和进程挂起

使用Mono将C#编译运行至WebAssembly平台

从 Mono C# 运行 Bash 命令