2012-01-05 82 views
0

我有一個編譯VB6代碼的dll(用vb6編寫)。 我正在讀取註冊表中的VB6.exe路徑,它工作正常。如何在不知道註冊表路徑vb6的情況下查找註冊表值?

m_oRegTool.RegistryPath = "Applications\vb6.exe\shell\make\command" 

sVB6EXEFile = m_oRegTool.GetValueData("", "") 

問題是VB6.exe路徑位於註冊表中XP和win 7(64位)的不同位置。 任何想法如何在註冊表中找到VB6.exe而不指定註冊表中的位置?

感謝,

回答

2

我認爲(在標準安裝,如果用戶沒有更改默認),以下注冊表項將包含路徑的exe:

HKEY_CLASSES_ROOT\VisualBasic.Project\shell\open\command 

的在這個關鍵的默認值包含vbp文件打開命令 - 在我的機器:

"C:\Program Files (x86)\Microsoft Visual Studio\VB98\vb6.exe" "%1" 

所以,你可以只刪除「%1」,另一雙引號,以獲得你的路徑

0

我不知道你爲什麼要搞亂Shell的註冊表項。

您應該可以使用Shell32的COM接口或標準導出入口點來針對相應文件(通常是.VBP)調用「make」動詞。導航到.VBP的Shell Folderitem並調用它的InvokeVerb方法或調用ShellExecute/Ex傳遞文件路徑和「make」動詞。

不需要註冊表spelunking,而且您正在使用記錄的API!

2

你可以從安裝程序寫入的註冊表值獲得VB6的安裝文件夾:

HKLM\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual Basic\ProductDir 

在我的機器,這個值是C:\Program Files\Microsoft Visual Studio\VB98

有樣品(C#)代碼應該得到這個路徑在我的BuilderPro項目中。

+0

C#代碼對於VB6編碼的用戶來說沒有多大用處...... – 2012-01-05 13:36:17

+1

不,但他們已經有了讀取註冊表的代碼。我的回答是關於安裝本身使用的位置的更多信息,而不是讀取某些僅包含路徑作爲其他內容的其他值。 – Deanna 2012-01-05 17:36:03