我正在尝试通过连接到命令提示符从 java 执行 .exe 文件,但是,当我运行该文件时,我收到一条警告,提示 Windows 已停止执行。然后经过长时间的搜索,我手动将文件的兼容性从 windows xp 更改为 win 7,但我不能每次都手动执行此操作,因为我试图从 java 代码自动化整个过程。
帮帮我,如果有任何方法可以从命令提示符更改兼容模式,以便我可以从 java 代码运行它
提前致谢
我正在尝试通过连接到命令提示符从 java 执行 .exe 文件,但是,当我运行该文件时,我收到一条警告,提示 Windows 已停止执行。然后经过长时间的搜索,我手动将文件的兼容性从 windows xp 更改为 win 7,但我不能每次都手动执行此操作,因为我试图从 java 代码自动化整个过程。
帮帮我,如果有任何方法可以从命令提示符更改兼容模式,以便我可以从 java 代码运行它
提前致谢
您可以使用 Windows“reg”命令添加/删除/读取注册表元素。
在注册表路径中HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
您会发现所有已更改的可执行文件(.exe)兼容性选项,您也可以添加自己的应用程序并更改其选项
这是您可以更改的可用选项的列表
特权等级:
RUNASADMIN
- 使用管理安全令牌运行程序显示设置:
DISABLETHEMES
- 禁用视觉主题640X480
- 以 640 x 480 屏幕分辨率运行HIGHDPIAWARE
- 在高 DPI 设置下禁用显示缩放256COLOR
- 以 256 种颜色运行DISABLEDWM
- 禁用桌面组合兼容模式:
WIN95
- 视窗 95WIN98
- 视窗 98WIN4SP5
- Windows NT 4.0 SP5WIN2000
- 视窗 2000WINXPSP2
- Windows XP SP2WINXPSP3
- Windows XP SP3VISTARTM
- 远景VISTASP1
- 远景 SP1VISTASP2
- 远景 SP2WIN7RTM
- Windows 7的WINSRV03SP1
- 视窗服务器 2003 SP1WINSRV08SP1
- 视窗服务器 2008 SP1这是一个如何使用 Runtime 方法运行“reg add”命令的示例
String exePath = "C:\\Program Files\\MyApp\\Test5.exe";
String exe_run_option = "WINXPSP3";// run with Windows XP SP3 compatibilities
String command = "reg.exe Add \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"" + exePath + "\" /d \"" + exe_run_option + "\"";
Process p = Runtime.getRuntime().exec(command);
//if the value already exists this will cause the reg command to pause and eat the cpu performance, so we give it a timeout
p.waitFor(2,TimeUnit.SECONDS);
//You can check the exit value of the process generally a 0 value means a succeed operation
try{
if(p.exitValue() != 0){
// we probably have an error
}
}catch(IllegalThreadStateException e){
//the process didn't finish execution and we tried to see it's exit value(terminated in 2 seconds forcibly)
//here you can try removing the key and adding it again with a different value using "reg delete" command (you might need to read the current value to add it together with the new one)
}
如果您需要为一个可执行文件添加多个值,请不要为该应用程序多次调用相同的命令,这将导致 reg 编辑器像上面指出的那样眩晕,而只需像这样同时添加值
String exe_run_option = "option1 option2 option3";//..etc
这仅适用于可执行文件(.exe),例如,您不能对 jar 文件执行此操作,而是可以使用 .exe runner(wrapper) 文件并将这些选项应用于它,然后运行 jar文件。
- 您必须具有管理员权限才能将元素添加到注册表,因此 java 应用程序在执行上述代码期间必须具有管理员权限
以下代码用于从 java 代码执行命令。
Process p = Runtime.getRuntime().exec("your command");
p.waitFor();