UPDATE:ウィックス - バイナリファイル内のSQL四角カッコ
以下の回答が代替ソリューションとして仕事をしている間、私は私の最初の方法は、実際の作業ではないことに言及したいと思います。以下の答えを見直した後、私はSession.Log()呼び出しが実際にログファイルに投稿されたときに[...]を取り除いていることを知りました。角括弧はSQLCommandオブジェクトに渡されたときにSQLに残っていました。私の実際の問題は、SQL(そのうちの最初の数行しか掲載していない)が、SQLコマンドではない「GO」を持っていたことでした。私はその問題を解決したら、すべてが働いた:)
を*(リマインダーは、できるだけ多くの情報を掲載することは常に有用である:D)
をウィックスでは、私は2進要素
に保存されたSQLファイルを持っています<Binary Id="SQLStep1" SourceFile="SourceDir\Step1_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2a" SourceFile="SourceDir\Step2a_SQL_Build.sql"></Binary>
<Binary Id="SQLStep2b" SourceFile="SourceDir\Step2b_SQL_Build_sp_iv6Login.sql"></Binary>
<Binary Id="SQLStep2c" SourceFile="SourceDir\Step2c_SQL_Grant.sql"></Binary>
私は、バイナリテーブルからSQLを引っ張ってカスタムアクションを使用して、(インストーラにテキストボックスが提供する)、データベース名
private static string ReplaceDBName(Session session, string binaryKeyName)
{
View v = session.Database.OpenView("SELECT Data FROM Binary WHERE Name = '{0}'", binaryKeyName);
v.Execute();
Record r = v.Fetch();
using (StreamReader reader = new StreamReader(r.GetStream("Data")))
{
string text = reader.ReadToEnd();
text = text.Replace(@"DB_NAME", session["DATABASE_NAME"]);
session.Log("Running SQL: " + text);
return text;
}
}
を文字列置き換え
例のSQL文は、このようなものです:
USE [master]
GO
/****** Object: Database [DB_NAME] Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE [DB_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
しかし、私は「バイナリ」テーブルから抜け出す文字列は、彼らがWiXのプロパティだったように、すべての[...]コンテンツを引き出しているようですので、私は残している
USE
GO
/****** Object: Database Script Date: 02/23/2010 15:02:47 ******/
CREATE DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS
GO
WiXがWiXのプロパティではないと思うように設定できるフラグはありますか?
問題のロギング部分については、ログインする内容をプロパティに格納することができます。オプションでプロパティを参照する文字列をログに記録することもできますが、冗長ログにはすでにプロパティ値が記録されているので、おそらくその部分をスキップできます。 –