Weird behavior of ShellExecute on Vista

  • Thread starter Thread starter Mihai Ciumeică
  • Start date Start date
M

Mihai Ciumeică

Greetings, everyone. I apologize in advance if the question is off-topic in
here, but the only newsgroup here specifically about Windows Vista registry
is in German. So, here goes.

I'm developing an application that must at one point launch a user-given
file. So I open the registry, look under HKCR\{name of file type}\shell, get
the name of the default verb ('Play' for video files etc.), then look up the
appropriate handler (the program executable) in the verb's subkey, check if
I can launch the handler and then do so. Later I might, with the user's
permission, change it to another program, or add my own verb, or whatever.

The problem is, under Vista, these verbs don't work. They don't even show up
in the context menu. For example, when I right-click a video file, the
default action is 'Open', which launches my VLC media player. The default
action in HKCR\avifile\shell is 'Play', and the handler under
HKCR\avifile\shell\play\command is wmplayer.exe. I'm guessing the fact that
the 'command' key has a value called 'LegacyDisable' has something to do
with it.

So my question is, where exactly in the registry does ShellExecute look for
the default verb and its handler?

Thank you for your time.
 
Mihai Ciumeică said:
Greetings, everyone. I apologize in advance if the question is off-topic
in here, but the only newsgroup here specifically about Windows Vista
registry is in German. So, here goes.

I'm developing an application that must at one point launch a user-given
file. So I open the registry, look under HKCR\{name of file type}\shell,
get the name of the default verb ('Play' for video files etc.), then look
up the appropriate handler (the program executable) in the verb's subkey,
check if I can launch the handler and then do so. Later I might, with the
user's permission, change it to another program, or add my own verb, or
whatever.

The problem is, under Vista, these verbs don't work. They don't even show
up in the context menu. For example, when I right-click a video file, the
default action is 'Open', which launches my VLC media player. The default
action in HKCR\avifile\shell is 'Play', and the handler under
HKCR\avifile\shell\play\command is wmplayer.exe. I'm guessing the fact
that the 'command' key has a value called 'LegacyDisable' has something to
do with it.

So my question is, where exactly in the registry does ShellExecute look
for the default verb and its handler?

Thank you for your time.



When you right-click a .avi file it first looks at the default key at

HKEY_CLASSES_ROOT\.avi

to determine where to subsequently jump to ie

HKEY_CLASSES_ROOT\{value of default key}\shell


In your case you would appear to have associated .avi files with VLC Media
Player, so you probably have a VLC entry there. Explore what values you have
under that key, and it will perhaps become apparent what's happening.
 
So my question is, where exactly in the registry does ShellExecute look
When you right-click a .avi file it first looks at the default key at

HKEY_CLASSES_ROOT\.avi

to determine where to subsequently jump to ie

HKEY_CLASSES_ROOT\{value of default key}\shell


In your case you would appear to have associated .avi files with VLC Media
Player, so you probably have a VLC entry there. Explore what values you
have under that key, and it will perhaps become apparent what's happening.

There's no mention of VLC in there. Where does the system look next, if it
finds LegacyDisable in the first location?
And here are the contents of the registry branch, edited for brevity:

[HKEY_CLASSES_ROOT\AVIFile\shell]
@="Play"

[HKEY_CLASSES_ROOT\AVIFile\shell\open]
"LegacyDisable"=""
[HKEY_CLASSES_ROOT\AVIFile\shell\open\command]
@="%ProgramFiles%\Windows Media Player\wmplayer.exe" /prefetch:8 /Open "%L"
[HKEY_CLASSES_ROOT\AVIFile\shell\open\DropTarget]
"CLSID"="{CE3FB1D1-02AE-4a5f-A6E9-D9F1B4073E6C}"

[HKEY_CLASSES_ROOT\AVIFile\shell\play]
@="&Play"
"MUIVerb"=@%SystemRoot%\system32\unregmp2.exe,-9991
"LegacyDisable"=""
[HKEY_CLASSES_ROOT\AVIFile\shell\play\command]
@="%ProgramFiles%\Windows Media Player\wmplayer.exe" /prefetch:8 /Play "%L"
[HKEY_CLASSES_ROOT\AVIFile\shell\play\DropTarget]
"CLSID"="{CE3FB1D1-02AE-4a5f-A6E9-D9F1B4073E6C}"

I might resort to just searching the registry for all mentions of .avi,
avifile and VLC, but, if nothing else, I'd like to help the next person
looking for the solution to this. :-)
 
Right-click on

HKEY_CLASSES_ROOT\.avi

choose export and paste the exported .reg file in here.
 
Jon said:
Right-click on

HKEY_CLASSES_ROOT\.avi

choose export and paste the exported .reg file in here.

Never mind that; I just searched the registry and found an obscure key
called
HKEY_CURRENT_USER\Software\Microsof\Windows\CurrentVersion\Explorer\FileExts\.avi\UserChoice,
which pointed to VLC. Apparently, in Vista, changing a file association is
now a per-user setting. I'm sorry to have bothered you guys with what I
could've done myself, and thank you for replying.
 
Mihai Ciumeică said:
Never mind that; I just searched the registry and found an obscure key
called
HKEY_CURRENT_USER\Software\Microsof\Windows\CurrentVersion\Explorer\FileExts\.avi\UserChoice,
which pointed to VLC. Apparently, in Vista, changing a file association is
now a per-user setting. I'm sorry to have bothered you guys with what I
could've done myself, and thank you for replying.


Interesting. That's a new one on me too, I must confess. Glad you've found
the culprit anyhow.
 
Checkout the Per-user override here:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi

This applies to Windows XP as well as for Windows Vista.

--
Regards,

Ramesh Srinivasan, Microsoft MVP [Windows Shell/User]
Windows® Troubleshooting http://www.winhelponline.com
Winhelponline.com blog http://www.winhelponline.com/blog


Greetings, everyone. I apologize in advance if the question is off-topic in
here, but the only newsgroup here specifically about Windows Vista registry
is in German. So, here goes.

I'm developing an application that must at one point launch a user-given
file. So I open the registry, look under HKCR\{name of file type}\shell, get
the name of the default verb ('Play' for video files etc.), then look up the
appropriate handler (the program executable) in the verb's subkey, check if
I can launch the handler and then do so. Later I might, with the user's
permission, change it to another program, or add my own verb, or whatever.

The problem is, under Vista, these verbs don't work. They don't even show up
in the context menu. For example, when I right-click a video file, the
default action is 'Open', which launches my VLC media player. The default
action in HKCR\avifile\shell is 'Play', and the handler under
HKCR\avifile\shell\play\command is wmplayer.exe. I'm guessing the fact that
the 'command' key has a value called 'LegacyDisable' has something to do
with it.

So my question is, where exactly in the registry does ShellExecute look for
the default verb and its handler?

Thank you for your time.
 
Back
Top