我正在創建一個MSBuild任務,它將讀取特定註冊表項的註冊表。如果我在控制檯應用程序中編寫相同的代碼行(請參閱下文),它將返回預期結果,但是當它位於MSBuild任務中時,它不返回任何內容。如何使用自定義msbuild任務讀取註冊表值?
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
我希望上面的代碼返回Nothing
如果鍵/值對不存在的,如果它存在返回值。當MSBuild任務得到執行時,我得到Nothing
。是否有一些屬性需要應用於MSBuild任務的Execute函數,以告知它需要讀取註冊表?
編輯:
這裏是正在從MSBuild任務執行:
我beleive這個由Registry Redirector我在32位運行的MSBuild Vista x64的機器上造成的。有沒有什麼辦法可以告訴自定義MSBuild任務(用VB .Net編寫)查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\
,那麼只有在沒有任何東西存在的情況下,再看看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\
?
謝謝
斯科特藍
您是否嘗試過像RegMon這樣的工具,以確保您在讀取MSBuild命中時正確的註冊表項?可能會發生一些32位/ 64位的嗡嗡聲? – 2009-12-15 05:13:48
不錯的想法,我會看看... – Scott 2009-12-15 05:14:42
因此,'RegMon'被'Process Monitor'所替代,它報告說當我使用控制檯應用程序來讀取註冊表時,它是通過TestingRegistry成功讀取的。 exe(程序名稱)。但是當我運行這個任務時,它使用了顯示devenv.exe作爲調用應用程序,並且實際上是試圖打開這個鍵:HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSSQLServer \ Setup,並得到一個'NAME NOT FOUND'錯誤。爲什麼它會在'Wow6432Node'元素中添加路徑? – Scott 2009-12-15 05:33:42