2012-01-05 6 views
0

VB6コードをコンパイルするDLL(vb6で書かれています)があります。 レジストリからVB6.exeのパスを読み取っていますが、正常に動作します。どのようにレジストリパスvb6を知らずにレジストリ値を見つけるには?

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

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

問題は、VB6.exeのパスがXP用のレジストリの別の場所にあり、7(64ビット)に勝つということです。 どのように私はレジストリ内の場所を指定せずにレジストリ内のVB6.exeを見つけることができる任意のアイデア?次のレジストリキーがパスにexeファイルが含まれていることを

おかげで、

答えて

2

私は(標準でインストールして、ユーザーがデフォルトに変更されていない場合)ことを考える:

HKEY_CLASSES_ROOT\VisualBasic.Project\shell\open\command 

このキーのデフォルト値はvbpファイルのオープンコマンドが含まれています - 私のマシンで:

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

だから、あなただけ取得するには、「%1」および他の二重引用符を削除することができあなたのパス

0

とにかくシェルのレジストリエントリを混乱させる理由はわかりません。

Shell32のCOMインターフェイスまたは標準エクスポートのエントリポイントを使用して、適切なファイル(通常は.VBP)に対して "make"動詞を呼び出すことができます。 .VBPのShell Folderitemに移動し、その上でInvokeVerbメソッドを呼び出すか、ファイルパスと "make"動詞を渡してShellExecute/Exを呼び出します。

レジストリが必要ではなく、文書化されたAPIを使用しています!あなたはインストーラによって書かれたレジストリ値からVB6のインストールフォルダを取得することができます

2

:私のマシン上で

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

、この値はC:\Program Files\Microsoft Visual Studio\VB98

このパスを取得するサンプル(C#)コードがありますです私のBuilderProプロジェクトで

+0

VB6でコーディングする人にとってC#コードはあまり役に立ちません... –

+1

いいえ、しかし、レジストリを読み込むコードはすでにあります。私の答えは、インストール自体が、他の何かの一部としてパスを含んでいる他の値を読むのではなく、インストール自体が使用する場所に関するものでした。 – Deanna

関連する問題