0

我正在尝试通过连接到命令提示符从 java 执行 .exe 文件,但是,当我运行该文件时,我收到一条警告,提示 Windows 已停止执行。然后经过长时间的搜索,我手动将文件的兼容性从 windows xp 更改为 win 7,但我不能每次都手动执行此操作,因为我试图从 java 代码自动化整个过程。

帮帮我,如果有任何方法可以从命令提示符更改兼容模式,以便我可以从 java 代码运行它

提前致谢

4

3 回答 3

1

您可以使用 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- 视窗 95
  • WIN98- 视窗 98
  • WIN4SP5- Windows NT 4.0 SP5
  • WIN2000- 视窗 2000
  • WINXPSP2- Windows XP SP2
  • WINXPSP3- Windows XP SP3
  • VISTARTM- 远景
  • VISTASP1- 远景 SP1
  • VISTASP2- 远景 SP2
  • WIN7RTM- Windows 7的
  • WINSRV03SP1- 视窗服务器 2003 SP1
  • WINSRV08SP1- 视窗服务器 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)
}


铭记于心

  1. 如果您需要为一个可执行文件添加多个值,请不要为该应用程序多次调用相同的命令,这将导致 reg 编辑器像上面指出的那样眩晕,而只需像这样同时添加值
    String exe_run_option = "option1 option2 option3";//..etc

  2. 这仅适用于可执行文件(.exe),例如,您不能对 jar 文件执行此操作,而是可以使用 .exe runner(wrapper) 文件并将这些选项应用于它,然后运行 ​​jar文件。

  3. 您必须具有管理员权限才能将元素添加到注册表,因此 java 应用程序在执行上述代码期间必须具有管理员权限
于 2019-08-03T00:07:29.510 回答
0

这也在这里解决:

如何从命令行设置可执行文件的兼容模式?

不确定这是否有帮助。

于 2013-10-31T05:50:25.487 回答
0

以下代码用于从 java 代码执行命令。

Process p = Runtime.getRuntime().exec("your command");
p.waitFor();
于 2013-10-31T06:06:49.777 回答