Я создаю задачу MSBuild, которая прочитает реестр для определенного ключа реестра. Если я пишу ту же строку кода (см. ниже) в консольном приложении она возвращает ожидаемый результат, но когда это в задаче MSBuild, она ничего не возвращает.
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Я ожидал бы, что вышеупомянутый код возвратится Nothing
если пара ключ/значение не существует и возвращает значение, если это действительно существует. Я добираюсь Nothing
когда задача MSBuild выполняется. Есть ли некоторый атрибут, что я должен обратиться к Выполнить функции задачи MSBuild сказать ему, что он должен прочитать реестр?
Править:
Вот то, что выполняется от задачи MSBuild:
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Я полагаю, что это вызывается Редиректором Реестра на моей машине Vista x64 под управлением MSBuild в 32 битах. Есть ли любой способ, которым можно сказать пользовательской задаче MSBuild (записанный в .NET VB) заглядывать HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\
затем, только если ничто не существует там, затем заглядывают HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\
?
Спасибо,
Scott Blue
Как насчет использования тернарной функции 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()
Вы можете читать реестр прямо из MSBuild, без пользовательской задачи, например:
$(registry:Hive\MyKey\MySubKey@Value)
Например,
$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\)
Вы сказали, что хотите сделать это из пользовательской задачи, так что это может быть неприменимо, но я размещаю это в случае, если это поможет.
Наш скрипт msbuild запускается из командной строки Visual Studio x86. Он не читает 64-битный реестр при использовании этого синтаксиса. Есть ли другой синтаксис, который позволит x86-версии читать 64-битный реестр?
.