【问题标题】:run C code from C#从 C# 运行 C 代码
【发布时间】:2016-11-06 05:07:48
【问题描述】:

有什么方法可以从 c# 代码调用 c 代码?

我已经阅读了很多 Microsoft 文档,并且我暂时尝试过这种方式:

Process proc = new Process();
proc.StartInfo.WorkingDirectory = "path-to-C-code";
proc.StartInfo.FileName = "C-code-name";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());
proc.WaitForExit();

但显然不起作用。

无论我做什么proc.StartInfo.FileName,这个字符串都保持为空

这是用于杀死自己的进程的 C 代码。

#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[], char *env[]) {

  int value1;
  int value2;

  srandom(time(NULL));
  switch (random() % 7) {
  case 0:
    exit(random() % 10);
    break;

  case 1:
    value1 = value1 / (value2 - value2);
    break;

  case 2:
    kill(getpid(), SIGKILL);
    break;

  case 3:
    alarm(random() % 60);
    break;

  case 4:
    __asm__("sti");
    break;

  case 5:
    value1 = *((int*) NULL);
    break;

  default:
    break;
  }

  return 0;
}

提前谢谢你。

【问题讨论】:

  • “显然不起作用”是什么意思?错误?还有什么?
  • 这部分我做什么都没关系 proc.StartInfo.FileName 总是一个空字符串,所以它只是不运行代码。
  • 您是否正在尝试执行 C 源代码?还是实际的可执行文件(在这种情况下,用什么语言编写并不重要,因为它已被转换为机器指令)?或者你想做一些互操作(在这种情况下 PInvoke 对你来说可能很有趣)?
  • 我正在尝试执行可执行文件。
  • 你检查过 AskUbuntu 的帖子 c# - Opening the terminal process and pass commands? 吗?

标签: c# c linux mono processstartinfo


【解决方案1】:
using System;
using System.Diagnostics;

namespace runGnomeTerminal
{
    class MainClass
    {
        public static void ExecuteCommand(string command)
        {
            Process proc = new System.Diagnostics.Process ();
            proc.StartInfo.FileName = "/bin/bash";
            proc.StartInfo.Arguments = "-c \" " + command + " \"";
            proc.StartInfo.UseShellExecute = false; 
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start ();

            while (!proc.StandardOutput.EndOfStream) {
                Console.WriteLine (proc.StandardOutput.ReadLine ());
            }
        }

        public static void Main (string[] args)
        {
            ExecuteCommand("gnome-terminal -x bash -ic 'cd $HOME; ls; bash'");
        }


    }
}

感谢 J. Piquard

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多