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 the Open 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
via rundll32
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 shortcut Windows+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 supported SHOpenWithDialog
API function instead, or use ShellExecute
or ShellExecuteEx
with the openas
verb; the latter may be particularly useful because it is easy to do from a scripting language such as VBScript.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…