我制作了一个小型的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应用程序的主要思想是简化安装过程。无论您使用哪种操作系统,都可以使用外部应用程序。如果我不得不要求用户以管理员身份运行它,那么它将失去意义(使用简单)。
答案 0 :(得分:1)
我猜您正在以常规用户身份运行代码。
默认情况下,在Windows 7下以UAC阻止以普通用户身份写入Program 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知道您的程序需要提升权限。
同时检查名为elevate
的[3]实用程序,它会将您的程序作为子进程生成,同时处理所有来自父(elevate
)程序本身的UAC权限请求。
[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]
答案 1 :(得分:0)
这是所有权限问题。我的机器上有同样的问题。你的java代码没有错。我尝试使用命令行创建文件夹并获得“拒绝访问”。
C:\Users\alexr>mkdir "C:\Program Files\mytest"
Access is denied.
因此,解决方案是在其他位置创建文件夹还是以管理员身份运行。正如@Alex K. aready所说,请参阅这篇文章以了解如何获得此类权限。
Windows 7 Create Folder in "Program Files" failing in C# code even thought I have admin rights!
答案 2 :(得分:0)
您没有在Program Files
中创建目录的适当权限。您必须以管理员权限启动应用程序。
要学习的一件重要事情是,在开发应用程序时,不应该编写它们来保存/修改Program Files
内的数据;相反,他们应该写AppData
我们的My Documents
。
自Windows Vista以来,Program Files
中的修改文件已被严重弃用,甚至更早。您应该从一开始就尝试遵循此规则,否则如果您想要在线发布它,则意味着要重写整个应用程序。