Java程序调用C#程序写入%ProgramData%时失去管理员权限
场景:Java程序调用C#程序写入%ProgramData%时失去管理员权限,c#,java,windows-7,admin,shortcut,C#,Java,Windows 7,Admin,Shortcut,场景: 我有一个基于Java的安装程序 基于Java的安装程序调用C#程序,其任务是创建快捷方式 快捷方式位置取决于安装程序是以管理员身份运行还是以普通用户身份运行。当以管理员身份运行时,我试图创建到“%ALLUSERSPROFILE%\Desktop”的快捷方式,否则我将写入“%USERPROFILE%\Desktop” 我的印象是,当我的Java程序调用我的C#shortcut maker程序时,问题似乎是失去了管理权限 注意事项: 我以管理员身份运行基于Java的安装程序(右键单击,以管理
DirectoryNoFoundException was unhandled
The system cannot find the path specified. (Exception from HRESULT: 0x80070003)
我在shortcutmaker命令之前添加了“mkdir”命令。使用mkdir命令,只需确保目录存在,然后再尝试写入它们
重新构建安装程序并运行它,当尝试mkdir“%ALLUSERSPROFILE%\Desktop”时,java抛出异常
java.io.IOException: Cannot run program "mkdir": CreateProcess error=2, The system cannot find the file specified
java.io.IOException: Cannot run program "mkdir": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
此时,我的进程似乎没有获得管理员访问权限
Process process = Runtime.getRuntime().exec(command);
我去看看还能不能找到别的东西
更新2
以下是我尝试过的一些信息:
这表明%ALLUSERSPROFILE%未被翻译
我通过以下方式获得环境变量值,而不是%ALLUSERSPROFILE%:
String allUsersProfile = System.getenv("ALLUSERSPROFILE");
String userProfile = System.getenv("USERPROFILE");
然后我就能够向C#程序提供实际值。但我还是有问题
从管理控制台,我可以导航到“c:\ProgramData\Start Menu”,但如果我使用管理权限运行“explorer”,我可以导航到“c:\ProgramData”,但看不到任何超出此权限的内容。。。通过查看,我发现“c:\ProgramData\Start Menu”是一个受保护的操作系统文件。所以我打开设置来查看它。所以现在我可以看到它,但不能进入它
使用系统内部,我将explorer.exe提升为“system”访问权限,但仍然无法进入该文件夹(系统内部提升参考:)
我右键单击文件夹并签出安全选项卡。看起来就连我的“系统”用户也有有限的访问权限。我觉得这有点令人困惑,我可以从管理命令提示符运行命令,将快捷方式写入桌面,但通过其他过程,我无法。。。我还发现访问有点不一致。我现在已经把它放在了次要位置。在我的截止日期前有太多事情要做。如果时间允许的话,我以后再谈这个问题。我会密切注意,以防有人知道有用的知识。