如何调用用C#编写的 exe ,它接受来自VB.NET应用程序的命令行参数。
例如,我们假设C#exe名称是“ SendEmail.exe ”,其4个参数是 From,TO,Subject和Message ,如果我放置了exe在C盘中。这是我从命令提示符
调用的方式C:\SendEmail from@email.com,to@email.com,test subject, "Email Message " & vbTab & vbTab & "After two tabs" & vbCrLf & "I am next line"
我想从VB.NET应用程序中调用这个“SendEmail”exe并从VB传递命令行参数(参数将使用vb语法,如vbCrLf,VBTab等)。这个问题可能看起来很愚蠢,但我试图将复杂的问题分成一系列较小的问题并征服它。
答案 0 :(得分:1)
因为您的问题有C#标记,我建议使用您首选语言重新旋转的C#解决方案。
/// <summary>
/// This will run the EXE for the user. If arguments are passed, then arguments will be used.
/// </summary>
/// <param name="incomingShortcutItem"></param>
/// <param name="xtraArguments"></param>
public static void RunEXE(string incomingExePath, List<string> xtraArguments = null)
{
if (File.Exists(incomingExePath))
{
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
System.Diagnostics.Process proc = new System.Diagnostics.Process();
if (xtraArguments != null)
{
info.Arguments = " " + string.Join(" ", xtraArguments);
}
info.WorkingDirectory = System.IO.Path.GetDirectoryName(incomingExePath);
info.FileName = incomingExePath;
proc.StartInfo = info;
proc.Start();
}
else
{
//do your else thing here
}
}
答案 1 :(得分:1)
您可能不需要通过控制台调用它。如果它是在C#中完成并标记为public而不是internal或private,或者它依赖于公共类型,那么您可以将其作为VB.Net解决方案中的引用添加,并直接调用您想要的方法。
这是更清洁和更好的,因为您不必担心在主题或身体参数中转义空格或引号等事项。
如果您可以控制SendMail程序,只需进行一些简单的更改即可访问它。默认情况下,C#Console项目会为您提供以下内容:
using ....
// several using blocks at the top
// class name
class Program
{
//static Main() method
static void Main(string[] args)
{
//...
}
}
您可以从VB.Net中使用它,如下所示:
using ....
// several using blocks at the top
//Make sure an explicit namespace is declared
namespace Foo
{
// make the class public
public class Program
{
//make the method public
static void Main(string[] args)
{
//...
}
}
}
就是这样。再次,只需在项目中添加引用,Import
它就位于VB.Net文件的顶部,您可以直接调用Main()方法,而无需通过控制台。无论是.exe而不是.dll都没关系。在.Net世界中,它们都只是你可以使用的组件。