As part of automating BizTalk deployment, I’m using the following code to run process from 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;
The output of this process that I’m getting in the log file looks like this:
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.
Now, all I need to do is find out whether a process errored or not. And, I need to store both the output stream as well as the error stream into string variables. ( I don’t want to parse this string , you probably know this by now. And I don’t wish to encounter problems stated by Microsoft as “Deadlocks” which I don’t understand completely in this scenario.
Thanks for your help!
According to:
http://msdn.microsoft.com/en-us/library/aa559686(v=bts.20).aspx
The BTSTask.exe process returns 0 if success and non-zero if there was an issue. This return code will show up in your
p.ExitCode