Sco*_*ott 5 registry msbuild msbuild-task
我正在创建一个MSBuild任务,它将读取特定注册表项的注册表.如果我在控制台应用程序中编写相同的代码行(见下文),它将返回预期的结果,但是当它在MSBuild任务中时,它不返回任何内容.
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)
Nothing如果键/值对不存在,我希望上面的代码返回,如果它存在,则返回值.我Nothing在MSBuild任务执行时得到了.是否有一些属性需要应用于MSBuild任务的Execute函数来告诉它需要读取注册表?
编辑:
以下是从MSBuild任务执行的操作:
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)
我相信这是由我的Vista x64机器上的注册表重定向器在32位运行MSBuild引起的.是否有任何方法可以告诉自定义MSBuild任务(用VB .Net编写),HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\只有在没有任何内容的情况下查看然后查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\?
谢谢,
斯科特蓝
Jus*_* R. 14
您可以直接从MSBuild读取注册表,而无需自定义任务,如下所示:
$(registry:Hive\MyKey\MySubKey@Value)
Run Code Online (Sandbox Code Playgroud)
例如,
$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\)
Run Code Online (Sandbox Code Playgroud)
你说你想从自定义任务中做到这一点,所以这可能不适用,但我发布它以防万一.
使用 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
Run Code Online (Sandbox Code Playgroud)
假设您拥有Output()房产:
Private _sqlPath As String
<Output()> _
Public ReadOnly Property SqlPath() As String
Get
Return _sqlPath
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
然后你所要做的就是从Execute()方法中调用它:
_sqlPath = GetSqlPathFromReg().ToString()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3373 次 |
| 最近记录: |