2017-09-15 4 views
0

2つのデータベースを同期するために、WPF C#アプリケーション内のパラメータを含むプロンプトからコマンドを起動する必要があります。私のコードの下パラメータ付きのコマンドプロンプトを起動する

"c:\Program Files\Microsoft SQL Server\100\COM\replmerg.exe" -Publisher [sql2008-srv\sql2008srv] -PublisherDB [MIODB] -Publication [DBPublication] -Subscriber [UTENTE\SQL2008R2EXP] -SubscriberDB [MIODB] -SubscriptionType 1 -SubscriberSecurityMode 1 -Distributor [sql2008-srv\sql2008srv] -OutputVerboseLevel 4 -Output C:\Windows\Temp\mergeagent.log 

が、実行されません:

FILE.BATのコマンドは次のようです。ただ、点滅するカーソルでシェルを開きます。

string ciao = "\"c:\\Program Files\\Microsoft SQL Server\\100\\COM\\replmerg.exe\" -Publisher [sql2008-srv\\sql2008srv] -PublisherDB [DataNavi] -Publication [DataNaviPublication] -Subscriber [SFRANCESCO\\SQL2008R2EXP] -SubscriberDB [DataNavi] -SubscriptionType 1 -SubscriberSecurityMode 1 -Distributor [sql2008-srv\\sql2008srv] -OutputVerboseLevel 4 -Output C:\\Windows\\Temp\\mergeagent.log "; 

try 
{ 
    Process.Start("CMD.exe", "/K" +ciao); 
} 
catch (Exception ex)  
{   
    // Implement appropriate error handling here. 
    MessageBox.Show("errore:" + ex.Message, "Errore sincronizzazione"); 
} 
+4

試み ' "/ K" + ciao' – Will

+4

なぜ[Process.Start(https://msdn.microsoft.com/en-us/library/h6ak8zt5(V = vs.110)を使用しません。 aspx)とコマンドプロンプトを避ける? – Alexei

+0

Process.StartInfo.Argumentsを使用してparamsを渡します。 :https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v=vs.110).aspx – Sorceri

答えて

2

代わりに/ Kオプションのこの

1. CMD.EXE/Cコマンドに対処するためのいくつかの方法があります。

cmd.exe /?ヘルプからの抜粋

/Cは、文字列で指定されたコマンドを実行してから終了
/Kは、文字列で指定されたコマンドを実行しますがままに

string ciao = @"""c:\Program Files\Microsoft SQL Server\100\COM\replmerg.exe"" "+ 
    @"-Publisher [sql2008-srv\sql2008srv] -PublisherDB [DataNavi] -Publication [DataNaviPublication] "+ 
    @"-Subscriber [SFRANCESCO\SQL2008R2EXP] -SubscriberDB [DataNavi] -SubscriptionType 1 "+ 
    @"-SubscriberSecurityMode 1 -Distributor [sql2008-srv\sql2008srv] -OutputVerboseLevel 4 "+ 
    @"-Output C:\Windows\Temp\mergeagent.log"; 

try { 
    var proc = Process.Start("CMD.exe", "/c " + ciao); 
    proc.WaitForExit(); // optionally wait for exit 
} catch (Exception ex) { 
    // Implement appropriate error handling here. 
    Console.WriteLine("error:" + ex.Message); 
} 

2。バッチファイルを使用する

このような長い引数リストを使用すると、引用符で囲まれた問題が発生する可能性があります。より良い方法は、コマンドをバッチファイルに残してバッチファイルを実行させることです。

型FILE.BAT
"C:\ Program Files \ MicrosoftのSQLサーバ\ 100 \ COM \ replmerg.exe" -Publisher [sql2008srv \ sql2008srv] -PublisherDB [MIODB] -Publication [DBPublication] -subscriber [UTENTE \ SQL2008R2EXP] -SubscriberDB [MIODB] -SubscriptionType 1 -SubscriberSecurityMode 1 -Distributor [sql2008srv \ sql2008srv] -OutputVerboseLevel 4 -Output C:\ Windowsの\一時\のmergeagent.log

var proc = Process.Start("file.bat"); 

3. cmd.exeを使わずに直接コマンドを実行します。

string ciao = @"-Publisher [sql2008-srv\sql2008srv] -PublisherDB [DataNavi] -Publication [DataNaviPublication] " + 
    @"-Subscriber [SFRANCESCO\SQL2008R2EXP] -SubscriberDB [DataNavi] -SubscriptionType 1 " + 
    @"-SubscriberSecurityMode 1 -Distributor [sql2008-srv\sql2008srv] -OutputVerboseLevel 4 " + 
    @"-Output C:\Windows\Temp\mergeagent.log"; 

var proc = Process.Start(@"c:\Program Files\Microsoft SQL Server\100\COM\replmerg.exe", ciao); 
+0

ありがとうございます。すべてクリアです。それは私が理解する必要があったものでした – Disaji

関連する問題