В рамках автоматизации развертывания BizTalk я использую следующий код для запуска процесса из C #.
string commandArguments =
"ImportApp /ApplicationName:\"" + ApplicationFullName +
"\" /Package:\"" + MsiFilePath+ "\"";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "BTSTask.exe";
p.StartInfo.Arguments = commandArguments;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
StreamReader outputStream = p.StandardOutput;
StreamReader errorStream = p.StandardError;
// Read the standard output
//string output = outputStream.ReadToEnd();
string error = errorStream.ReadToEnd();
//WriteToLogFile(output);
if (!error.Equals(""))
{
WriteToLogFile(error);
throw new Exception("Error occurred while importing application " +
ApplicationFullName +
Environment.NewLine +
error);
}
p.WaitForExit();
p.Close();
return;
Вывод этого процесса, который я получаю в файле журнала, выглядит следующим образом:
Copyright (c) 2010 Microsoft Corporation. All rights reserved.
Information: Importing package "\\tc6218\BizTalkReceiveDrop\servername\Apps\Core.Artifacts.msi" into application "Core.Artifacts" in BizTalk configuration database (server="TC6218", database="BizTalkMgmtDb")...
Information: Performing action "Create" on host "ConfigurationDb" using package "\\ Apps\Core.Artifacts.msi".
Information: Validating resources (count=6)...
* Validating resource (-Type="System.BizTalk:Assembly" -Luid="TC.BizTalk.Functoid.AdvancedDatabaseLookup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f68c7d112162f09d")...
* Validating resource (-Type="System.BizTalk:Assembly" -Luid="TaylorCorp.Erp.ServiceBus.MasterData.Components.BusinessRules, Version=1.0.0.2, Culture=neutral, PublicKeyToken=f68c7d112162f09d")...
* Validating resource (-Type="System.BizTalk:BizTalkAssembly" -Luid="ICSM.Schemas, Version=4.0.1.0, Culture=neutral, PublicKeyToken=69c11018615fef04")...
* Validating resource (-Type="System.BizTalk:BizTalkAssembly" -Luid="ICSM.Pipelines, Version=4.0.1.0, Culture=neutral, PublicKeyToken=69c11018615fef04")...
* Validating resource (-Type="System.BizTalk:BizTalkAssembly" -Luid="ICSM.Maps, Version=2.0.0.0, Culture=neutral, PublicKeyToken=69c11018615fef04")...
* Validating resource (-Type="System.BizTalk:BizTalkBinding" -Luid="Application/Core.Artifacts")...
Information: Performing change requests...
Information: Calling BeginTypeChangeRequest for all selected resource types...
PerformingBeginChangeRequest
PerformingBeginChangeRequest
PerformingBeginChangeRequest
Adding resource (-Type="System.BizTalk:Assembly" -Luid="TC.BizTalk.Functoid.AdvancedDatabaseLookup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f68c7d112162f09d") to store.
Information: PerformingEndChangeRequestsWithRollBack
* Performing EndTypeChangeRequest for resource type "System.BizTalk:Assembly".
* Performing EndTypeChangeRequest for resource type "System.BizTalk:BizTalkAssembly".
* Performing EndTypeChangeRequest for resource type "System.BizTalk:BizTalkBinding".
Error: Resource (-Type="System.BizTalk:Assembly" -Luid="TC.BizTalk.Functoid.AdvancedDatabaseLookup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f68c7d112162f09d") already in store.
1) Use BTSTask's overwrite flag or
2) Set redeploy flag to true in BizTalk Project or
3) Click overwrite all checkbox in Admin MMC
to update if the resource exists in the specified target application "Core.Artifacts".
Overwrite flag will be ignored if the resource is associated with another application.
Command failed with 1 errors, 0 warnings.
Теперь все, что мне нужно сделать, это выяснить, ошибся ли процесс или нет. И мне нужно сохранить как выходной поток, а также поток ошибок в строковых переменных. (Я не хочу разбирать эту строку, вы, вероятно, уже знаете это. И я не хочу сталкиваться с проблемами, которые Microsoft называет «тупиками», которые я не совсем понимаю в этом сценарии.
Спасибо за вашу помощь!