Aub*_*bin 3 java windows rundll32 shell32.dll
在第七窗口中,以下命令显示一个对话框,然后终止而没有任何其他操作,为什么?
预期效果是启动关联程序Notepad++或至少启动Notepad
RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL D:\doc\toto.txt
Run Code Online (Sandbox Code Playgroud)

首先,请注意,这OpenAs_RunDLL是一个未记录的入口点,因此期望它起作用的唯一原因是,它在HKEY_CLASSES_ROOT注册表中作为Open With外壳动词的实现(至少在某些Windows版本中)出现。
这仅意味着可以期望它在由适当的shell函数调用时起作用。这并不意味着它将必然在任何任意上下文中工作。
在我的家用计算机(Windows Vista)OpenAs_RunDLL上rundll32,通过“开始”菜单的“运行”对话框发出命令时可以通过工作方式调用(即,使用选定的应用程序打开指定的文件),可以使用键盘快捷键打开该对话框Windows+R。
它并没有被出现的对话框中,但应用程序没有启动:在命令行控制台窗口发出时,和你描述的症状是相同的工作。这是完全合法的行为,因为您在非设计的上下文中使用了未记录的入口点。
由于不能保证OpenAs_RunDLL将来的Windows版本中都存在,因此结果很简单:不要使用它。请改用支持的SHOpenWithDialogAPI函数,或将ShellExecute或ShellExecuteEx与openas动词一起使用;后者可能特别有用,因为使用VBScript之类的脚本语言很容易做到。
解决方案很简单:cmde.exe start
下面是嵌入该命令的 Java 代码:
private void open( File file ) {
try {
final String cmd =
String.format( "cmd.exe /C start %s", file.getAbsolutePath());
Runtime.getRuntime().exec( cmd );
}
catch( final Throwable t ) {
t.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
选择后.project,将显示以下对话框:

当选择底部的单选按钮时,将显示以下对话框:

这正是我想要的。