3

我制作了一个小型 Java 应用程序,将目录从 CD 复制到 HD。我使用 Windows Vista 制作了这个程序,它可以工作,但是当我在 Windows 7 中运行它时,它失败了。

主要问题是需要在 Program Files 文件夹中创建一个文件夹。

我使用了 DestinationFolder.mkdirs(),但创建它失败

这是java代码:

public void Install_App()
{
    File srcFolder = new File(System.getProperty("user.dir") + "\\WINDOWS");
    File destFolder = new File("C:\\Program Files\\test1\\test2\\");
    if (srcFolder.exists())
    {
        try{
            if(!destFolder.exists())
        {
            destFolder.mkdirs();
        }
            copyFolder(srcFolder,destFolder,1);
        }catch(IOException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, e.toString());
            error=true;
            System.exit(0);
            }
    } else 
    {
        JOptionPane.showMessageDialog(null, "Error. Source Directory doesn't exist.");
        error=true;
    };
} 

...然后有一个 copyfolder 函数可以复制带有 inputstream 和 outputstream 的文件。

问题是该文件夹从未创建。我的登录用户是管理员。正如我所说,它在 Vista 中工作。

请问你能帮帮我吗?

谢谢。

问题是我在 java 中创建了这个应用程序以在 Windows 和 Mac 中运行它。在 Windows 中,它应该使用 autorun.inf 自动运行,如下所示:

[autorun]
OPEN=java_app.bat

那么这个蝙蝠将运行这个:

@echo off
start javaw -jar "java_app.jar"
EXIT

那么如何修改它以自动以管理员身份运行呢?这个 Java 应用程序的主要思想是简化安装和使用外部应用程序的过程,无论您使用哪种操作系统。如果我必须要求用户以管理员身份运行它,它会失去它的意义(使用简单)。

4

3 回答 3

1

我猜你正在以普通用户的身份运行你的代码。

在 Windows 7 下, UACProgram Files默认阻止以普通用户身份写入目录。这就是您的 Java 代码无法创建目录的原因。

尝试从特权 shell 运行您的 Java 代码。你可以有一个Start > [type cmd] > [right-click on 'cmd.exe' and select "Run as administrator"]java -jar现在,使用管理员命令提示符或java -classpath从管理员命令提示符运行编译的代码。它现在应该可以工作了。

自动化 UAC 提示:

您需要按照 [ 1 ] 和 [ 2 ]中的详细说明创建清单文件,让 Windows/UAC 知道您的程序需要提升的权限。

还要检查这个被称为 [ 3 ] 的实用程序,它会在处理所有来自父 ( ) 程序本身elevate的 UAC 权限请求时将您的程序作为子进程生成。elevate

[1] [http://msdn.microsoft.com/en-us/library/aa511445.aspx][2] 
[2] [http://msdn.microsoft.com/en-us/library/bb756929.aspx][3]
[3] [http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista.aspx][4]
于 2011-11-24T13:32:24.603 回答
0

您没有适当的权限在Program Files. 您必须以管理权限启动应用程序。

要学习的重要一点是,当您开发应用程序时,您永远不应该编写它们来保存/修改内部数据Program Files;相反,他们应该写信给AppData我们的My Documents.

Program Files从 Windows Vista 开始,甚至更早的时候,修改文件就已被严重弃用。您应该从一开始就尝试遵循此规则,否则如果您想在线发布它,那么重写整个应用程序就意味着头痛。

于 2011-11-24T13:37:52.917 回答
0

这就是所有的权限问题。我的机器上有同样的问题。您的 java 代码没有任何问题。我尝试使用命令行创建文件夹并得到“拒绝访问”。

C:\Users\alexr>mkdir "C:\Program Files\mytest"
Access is denied.

因此,解决方案是在其他位置创建文件夹还是以管理员身份运行。正如@Alex K. aready 所说,请参阅这篇文章以了解如何获得此类权限。

Windows 7 在“程序文件”中创建文件夹在 C# 代码中失败,即使我有管理员权限!

于 2011-11-24T13:33:42.087 回答