2017-02-10 5 views
-1

exeをVB#アプリケーションのコマンドライン引数を受け入れるC#で記述する方法。例についてはVBプロジェクトのコマンドライン引数を使用してC#コンソールEXEを実行する

、のは、C#のexeファイル名は「SendEmail.exe」とその4つの引数であると仮定しましょう、私はCドライブでexeファイルを配置している場合は件名とメッセージ、TOから、あると。これは私が、私は、(引数のvbCrLfのように、VBの構文を使用するVB.NETアプリケーションからこの「のsendEmail」exeファイルを呼び出し、VBからのコマンドライン引数を渡すしたいコマンドプロンプトから

C:\SendEmail [email protected],[email protected],test subject, "Email Message " & vbTab & vbTab & "After two tabs" & vbCrLf & "I am next line" 

を呼び出す方法ですVBTabなど)。この問題は愚かに見えるかもしれませんが、私は複雑な問題を一連の小さな問題に分割し、それを克服しようとしています。

+2

https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx –

+0

コンソールアプリケーションか、コマンドからプロセスを実行しますかライン? –

+0

この[MSDN](https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v = vs.110).aspx)で解決策を見つけました。 – mahesh

答えて

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

あなたは、コンソール経由でそれを呼び出すためにを必要としない場合があります。それがC#で行われ、内部または非公開の代わりにpublicとマークされている場合、またはパブリックタイプに依存している場合は、VB.Netソリューションの参照として追加して、直接必要なメソッドを呼び出すことができます。

これは、あなたの主体または身体の引数にスペースや引用符をエスケープするようなことを心配する必要がないので、はるかにクリーンで優れています。

SendMailプログラムを制御できる場合は、簡単な変更を加えてアクセス可能にします。あなたはこのようにVB.Netから使用することが利用できるようにすることができ

using .... 
// several using blocks at the top 

// class name 
class Program 
{ 
    //static Main() method 
    static void Main(string[] args) 
    { 
     //... 
    } 
} 

:それです

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) 
     { 
      //... 
     } 
    } 
} 

デフォルトでは、C#コンソールプロジェクトはあなたにこのような何かを提供します。再度、VB.Netファイルの先頭にImportというプロジェクトの参照を追加するだけで、コンソールを経由せずにMain()メソッドを直接呼び出すことができます。それはそれが.dllの代わりに.exeであるかどうかは関係ありません。 .Netの世界では、それらはすべてあなたが使用できるアセンブリです。

関連する問題