Under Window Seven, the following command displays a dialog box then terminates without any other action, why?
The expected effect is launching the associated program Notepad++
or at least Notepad
RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL D:\doc\toto.txt
The solution is very simple:
cmde.exe start
Here is the Java code which embed the command:
When
.project
is selected the following dialog is shown:and when the radio button at the bottom is chosen the following dialog is shown:
That's exactly what I want.
Based on other answers to similar questions and on code from CodeProject: Calling the Open With dialog box from your application, using C# and PInvoke.net: SHOpenWithDialog (shell32) this is the code which works for me
both on Windows XP and on Windows Vista and later. This code uses only documented API (no
rundll32
)Firstly, note that
OpenAs_RunDLL
is an undocumented entry point so the only reason to expect it to work is that it appears in the HKEY_CLASSES_ROOT registry as an implementation for theOpen With
shell verb (in at least some versions of Windows).This only means it can be expected to work when called by the appropriate shell functions. It does not mean it will necessarily work in any arbitrary context.
On my home machine (Windows Vista) calling
OpenAs_RunDLL
viarundll32
works (i.e., the specified file is opened using the selected application) when the command is issued via the Start Menu's Run dialog, which can be opened with the keyboard shortcutWindows+R
.It does not work when issued from a command line console window, and the symptoms are the same as you describe: the dialog is presented, but the application is not launched. This is perfectly legitimate behaviour, because you're using an undocumented entry point in a context it wasn't designed for.
Since there is no guarantee that
OpenAs_RunDLL
will exist at all in future versions of Windows, the upshot is simple: don't use it. Use the supportedSHOpenWithDialog
API function instead, or useShellExecute
orShellExecuteEx
with theopenas
verb; the latter may be particularly useful because it is easy to do from a scripting language such as VBScript.