【问题标题】:Launch a command prompt with parameters [duplicate]使用参数启动命令提示符[重复]
【发布时间】:2018-02-25 00:24:23
【问题描述】:

我需要使用 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");
}

【问题讨论】:

标签: c#


【解决方案1】:

解决这个问题的方法很少

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。使用批处理文件

有了这么长的参数列表,您可能会遇到引号问题(如果不是现在,那么在将来)。更好的方法是让命令留在批处理文件中并执行批处理文件。

输入文件.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

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);

【讨论】:

  • 非常感谢。全清。这是我需要了解的
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2021-01-04
  • 2013-09-22
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多