2017-09-15 44 views
0

我需要從迅速啓動命令與參數我的WPF C#應用程序中同步兩個數據庫命令提示符。啓動與參數

在file.bat的命令如下:

"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 

下面我的代碼,但不會運行。只是閃爍的光標開殼:

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傳遞參數。 :https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v=vs.110).aspx – Sorceri

回答

2

有多種方法來處理這個

1.使用CMD.EXE/C命令,而不是/ K選項。

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 Server的\ 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 \ TEMP \ 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