如何从C#系统托盘应用程序作为线程运行C程序?

我有一个C控制台应用程序,曾经在WindowsCMDterminal的前台运行,并采取用户击键input。 但是现在需要移动到后台,不需要用户input。

我已经创build了一个系统托盘,正确实施,右键单击退出并右键单击。 并有一个terminal程序,它的function。

而不是再次重写程序,我希望能够创build一个线程,调用我现有的程序中不需要terminal的function。

只是为了强调控制台交互方面已经从代码中删除,应用程序响应击键等希望这稍微澄清事情。

问:这可能吗? 而我将如何能够实现这一点?

(我通常不是一个使用更多embedded式C的PC程序员,所以.NET对我来说是相当陌生的,任何帮助都将不胜感激)

如已经发布的,您可以使用C#应用程序托盘中的Process.Start

  // Uses the ProcessStartInfo class to start new processes, // both in a minimized mode. void OpenWithStartInfo() { ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); startInfo.WindowStyle = ProcessWindowStyle.Minimized; Process.Start(startInfo); startInfo.Arguments = "www.northwindtraders.com"; Process.Start(startInfo); } 

http://msdn.microsoft.com/en-us/library/53ezey2s(v=vs.110).aspx

您可以尝试在隐藏状态下启动它: http : //msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx

有些程序员说要小心。 如果有任何意见,那么你的过程可能会停止。 确保没有真正停止你的程序。

你也可以试着用Process.Start启动一个cmd命令,但是我会说这太过分了。 这将启动另一个进程没有你的C#托盘应用程序控制:

  Process.Start("start /min cmd /c mycommand"); 

我不确定这是不是你问的问题,但如果你问是否可以从C程序中调用C程序中的函数,那么你可以。 只要你有你的C程序的源代码。 为了让C中的函数可用于C#程序,必须将其导出。 我会告诉你一个例子:

MyAddDll.h

 #include <iostream> extern "C" { __declspec(dllexport) int Add(int a, int b); } 

这里最重要的是你的函数被封装在一个extern "C"块中。 基本上,这告诉编译器不要破坏你的函数的名字。 另一个重要的部分是__declspec(dllexport) 。 这告诉编译器,你要导出这个函数,以便可以从另一个程序(如C#程序)调用它。

MyAddDll.cpp

 #include <iostream> #include "MyAddDll.h" extern "C" { __declspec(dllexport) int Add(int a, int b) { return (a + b); } } 

再一次,你的代码被封装在一个extern "C"块中,你需要添加__declspec(dllexport)函数。 现在你可以编译成DLL文件或EXE文件。 现在从C#调用它,它非常简单:

MyProgram.cs

 class Program { [DllImport("c:\\PathToMyDllOrExeFile\\MyAddDll.dll")] public static extern int Add(int val1, int val2); static void Main(string[] args) { int val1 = 12; int val2 = 4; Console.WriteLine("{0} + {1} = {2}", val1, val2, Add(val1, val2)); } } 

这就是全部!

一个“窍门”虽然是确保您的C程序和您的C#程序都编译为32位或64位。 您不能将C程序编译为64位,将C#程序编译为32位。 他们必须使用相同的位长。

您可以通过System.Diagnostics.Process从.NET代码启动C程序。 它将在一个单独的过程中运行。

您也可以从.NET代码中终止进程