Как Вы читаете значение реестра с помощью пользовательской msbuild задачи?

Я создаю задачу 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

5
задан alexandrul 19 May 2010 в 10:23
поделиться

3 ответа

Как насчет использования тернарной функции 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()
0
ответ дан 18 December 2019 в 10:45
поделиться

Вы можете читать реестр прямо из MSBuild, без пользовательской задачи, например:

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

Например,

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

Вы сказали, что хотите сделать это из пользовательской задачи, так что это может быть неприменимо, но я размещаю это в случае, если это поможет.

14
ответ дан 18 December 2019 в 10:45
поделиться

Наш скрипт msbuild запускается из командной строки Visual Studio x86. Он не читает 64-битный реестр при использовании этого синтаксиса. Есть ли другой синтаксис, который позволит x86-версии читать 64-битный реестр?

.
2
ответ дан 18 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: