5

特定のレジストリキーのレジストリを読み取るMSBuildタスクを作成しています。コンソールアプリケーションで同じコード行(以下を参照)を記述した場合、期待どおりの結果が返されますが、MSBuildタスク内にある場合は何も返されません。

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)

Nothingキーと値のペアが存在しない場合は上記のコードが返され、存在する場合は値が返されると思います。NothingMSBuildタスクが実行されたときに取得しています。レジストリを読み取る必要があることをMSBuildタスクの実行関数に適用する必要がある属性はありますか?

編集:

MSBuildタスクから実行されているものは次のとおりです。

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)

これは、32ビットでMSBuildを実行しているVistax64マシンのレジストリリダイレクターが原因であると考えています。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\カスタムMSBuildタスク(VB .Netで記述されている)に、そこに何も存在しない場合にのみ調べるように指示できる方法はありますHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\か?

ありがとうございました、

スコットブルー

4

3 に答える 3

16

次のように、カスタム タスクを使用せずに、MSBuild からレジストリを直接読み取ることができます。

$(registry:Hive\MyKey\MySubKey@Value)

例えば、

$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\)

カスタムタスクからやりたいとおっしゃっていたので、当てはまらないかもしれませんが、参考になればと思い投稿させていただきました。

于 2009-12-30T23:12:55.000 に答える
2

msbuild スクリプトは、x86 Visual Studio コマンド プロンプトから実行されます。この構文を使用する場合、64 ビット レジストリは読み取られません。x86 が 64 ビット レジストリを読み取れるようにする別の構文はありますか?

于 2010-02-12T14:23:09.720 に答える
0

VBのIf()三項関数を使用するのはどうですか?

Function GetSqlPathFromReg() As Object
    Return If(Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing), _
              Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing))
End Function

あなたがプロパティを持っていると仮定しますOutput()

Private _sqlPath As String

<Output()> _
Public ReadOnly Property SqlPath() As String
    Get
        Return _sqlPath
    End Get
End Property

Execute()次に、メソッドから呼び出すだけです。

_sqlPath = GetSqlPathFromReg().ToString()
于 2009-12-16T10:31:41.870 に答える