对于Windows 7或XP上的签名java小程序,什么会导致Desktop.isDesktopSupported()为true,而Desktop.isSupported(Desktop.Action.OPEN)为false?

对于Windows 7或XP上的签名java小程序,什么会导致Desktop.isDesktopSupported()为true,而Desktop.isSupported(Desktop.Action.OPEN)为false?,java,file,applet,launch,signed,Java,File,Applet,Launch,Signed,我有一大群用户无法从已签名的小程序中启动本地创建的文件(PDF、Word等)。双击Windows资源管理器中的文件将启动该文件,以便知道与启动应用程序的文件关联。技术支持人员在启用UAC的机器上远程登录,加载小程序没有问题,可以毫无问题地启动本地文件。这让我觉得这个大群体有一个共同的地方背景。用户正在Windows XP上运行Java 1.6u31(或7,不确定)。java控制台中没有显示任何错误,也没有显示任何内容(这都是传闻,因为我没有看到问题)。对于可能导致此行为的本地PC设置有何建议?根

我有一大群用户无法从已签名的小程序中启动本地创建的文件(PDF、Word等)。双击Windows资源管理器中的文件将启动该文件,以便知道与启动应用程序的文件关联。技术支持人员在启用UAC的机器上远程登录,加载小程序没有问题,可以毫无问题地启动本地文件。这让我觉得这个大群体有一个共同的地方背景。用户正在Windows XP上运行Java 1.6u31(或7,不确定)。java控制台中没有显示任何错误,也没有显示任何内容(这都是传闻,因为我没有看到问题)。对于可能导致此行为的本地PC设置有何建议?根据代码,问题似乎是Desktop受支持,但Desktop.Action.OPEN不受支持。有什么建议吗?谢谢。
我正在使用以下命令启动该文件:

            /*
            //old way that would work for Windows prior to Java 1.6
            //cmd = System.getenv("windir") +"\\system32\\"+"rundll32 SHELL32.DLL,ShellExec_RunDLL " + cmd;
            //cmd = "open "+cmd;  // Mac for PDF only?
            //try{
            //  Runtime.getRuntime().exec(cmd);
            //} catch (Exception e) {
            //  //handle error
            //}
            */
            Desktop desktop = null;
            if (Desktop.isDesktopSupported()) {
                desktop = Desktop.getDesktop();
                if (desktop.isSupported(Desktop.Action.OPEN)) {
                    try {
                        desktop.open(new File(file));
                        return;
                    } catch (IOException e) {
                        //Error launching the file
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(theFrame,
                            "Unable to launch the file.",
                            "Document Error", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                }
            } else {
                //This OS cannot launch the file
                JOptionPane.showMessageDialog(theFrame,
                        "This operating system is unable" +
                        "\nto launch external files" +
                        "\nfrom within this application.",
                        "Document Error", JOptionPane.ERROR_MESSAGE);
                    return;
            }
纯粹的猜测:

1) 受影响的用户都在Windows 7上

2) Vista/Win 7“UAC”正在咬你:

建议(仅诊断性):

找到一个受影响的用户,尝试禁用UAC,看看它是否“突然开始工作”

==================================================================================

增编8/24/2012:

1) 我从你随后的笔记中了解到,你不仅仅是在试图执行一个程序——你实际上是在试图调用一个Windows文件关联(即“shell open”a.pdf应该触发一个“AcroReader”实例)

2) 请看此链接:

3) 更新您的JDIC(如有必要)

4) 向小程序中添加两个测试按钮:

a) “打开”notepad.exe(查看是否可以按名称直接调用.exe)

b) “打开”somefile.txt(查看是否可以调用任何文件关联,如“.txt”的“记事本”)

5) 如果以上任何一项都不能解决问题,那么直接访问其中一台“出现故障的PC”,以便“亲自调试”


“希望有帮助

我明白了用户什么也看不到的原因:桌面受支持,但Desktop.Action.OPEN不受支持,并且我不显示有用的消息。所以问题是什么地方环境会导致这种行为?它是Windows配置还是Java配置?再次感谢!我在发布后也发现了这个问题,但我认为不是这样。我在自己的Win 7机器上有多个帐户,并将UAC设置为最严格的级别“始终通知”,我没有发现问题。不过,我还是会请技术人员提出建议。我也在网站上找到了对MagicISO的引用,并询问了这一点。谢谢。正在启动什么类型的文件?我运行Windows7并启用了UAC,但从未尝试过使用它来启动可执行文件。我想他们是UAC唯一会提示的东西。没有可执行文件。它将是用户创建的文件,如PDF、Word、Excel等。用户创建并上载文件,小程序允许用户通过按钮启动来验证刚刚上载的文件是否正确。该按钮是用户请求的,所以不要根据我的界面来判断我!谢谢,谢谢你进一步的调查。RE 2)问题相同,但未提出解决方案。RE 3)“更新您的JDIC”,不确定在这里要做什么。用户应具有标准JRE 1.6u31或更新版本(或1.7.x)。我以为桌面对象包含在标准安装中。RE 4)我在本地开发环境和技术支持下载与问题用户相同的jar时没有发现问题,因此在开发服务器上本地添加按钮对我没有帮助(除非我非常绝望,否则我无法要求问题用户登录我的开发服务器)。还在看。。。谢谢。@paulsm4谢谢。这仍然是一个问题。我正在使用带有管理员帐户的远程桌面连接到有问题的客户端XP计算机。“desktop.open(x);”未引发异常。在打印之前/之后进行调试,其间没有任何内容,但没有打开任何文件。我已尝试在Task Manager中关闭一些服务、病毒保护和终止某些内容。所有这些对XP机器都没有影响,我在自己的机器上运行相同的应用程序时仍然没有看到任何错误。我看到有关MagicIso问题的参考资料,但这台计算机上没有。任何其他建议将不胜感激!
Control Panel->User Accounts->Turn User Account Control off