情景:
我的印象是,当我的java程序调用我的C#快捷方式程序时,问题似乎是丢失了管理权限。
备注:
例外:
未处理的异常:System.UnauthorizedAccessException:Access是 否认。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED))at IWshRuntimeLibrary.IWshShortcut.Save()
对我缺少什么的想法?安装程序需要灵活地以普通用户和管理员身份运行...因此,我们可以理解我可以采取哪些措施来确保这种行为。
更新1:
我在运行时将调试器附加到C#程序。它扔了一个:
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:
下面给了我一些尝试的信息:Enterprise Logging not translating environment variables in XML Trace Listener fileName specification
它表明%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提升为“系统”访问权限但仍然无法进入该文件夹(系统内部提升参考:http://verbalprocessor.com/2007/12/05/running-a-cmd-prompt-as-local-system/)
我右键单击该文件夹并检出安全选项卡。看起来甚至我的“系统”用户访问受限。我发现这有点莫名其妙,我可以从一个管理命令提示符运行命令,将快捷方式写入桌面,但是通过这个其他进程我不能...我也发现访问有点不一致。 / p>
我会继续玩这个,如果我想出来的话,还会做另一个帖子。或者