Add naive Windows Java detection - JavaUtils for finding it on other systems (incomplete)
This commit is contained in:
		@@ -300,6 +300,9 @@ logic/tasks/ProgressProvider.h
 | 
			
		||||
logic/tasks/Task.h
 | 
			
		||||
logic/tasks/Task.cpp
 | 
			
		||||
 | 
			
		||||
# Utilities
 | 
			
		||||
logic/JavaUtils.h
 | 
			
		||||
logic/JavaUtils.cpp
 | 
			
		||||
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,11 @@
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <MultiMC.h>
 | 
			
		||||
#include "settingsdialog.h"
 | 
			
		||||
#include "ui_settingsdialog.h"
 | 
			
		||||
#include "logic/JavaUtils.h"
 | 
			
		||||
 | 
			
		||||
#include <MultiMC.h>
 | 
			
		||||
#include <settingsobject.h>
 | 
			
		||||
#include <QFileDialog>
 | 
			
		||||
#include <QMessageBox>
 | 
			
		||||
@@ -180,3 +181,11 @@ void SettingsDialog::loadSettings(SettingsObject *s)
 | 
			
		||||
	ui->preLaunchCmdTextBox->setText(s->get("PreLaunchCommand").toString());
 | 
			
		||||
	ui->postExitCmdTextBox->setText(s->get("PostExitCommand").toString());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SettingsDialog::on_pushButton_clicked()
 | 
			
		||||
{
 | 
			
		||||
	JavaUtils jut;
 | 
			
		||||
	QStringList paths = jut.FindJavaPath();
 | 
			
		||||
 | 
			
		||||
	ui->javaPathTextBox->setText(paths.at(0));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -53,6 +53,8 @@ private slots:
 | 
			
		||||
	
 | 
			
		||||
	void on_buttonBox_accepted();
 | 
			
		||||
	
 | 
			
		||||
	void on_pushButton_clicked();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	Ui::SettingsDialog *ui;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
      <enum>QTabWidget::Rounded</enum>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="currentIndex">
 | 
			
		||||
      <number>0</number>
 | 
			
		||||
      <number>2</number>
 | 
			
		||||
     </property>
 | 
			
		||||
     <widget class="QWidget" name="generalTab">
 | 
			
		||||
      <attribute name="title">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								logic/JavaUtils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								logic/JavaUtils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "JavaUtils.h"
 | 
			
		||||
#include "osutils.h"
 | 
			
		||||
#include "pathutils.h"
 | 
			
		||||
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
#if WINDOWS
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
JavaUtils::JavaUtils()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if WINDOWS
 | 
			
		||||
QStringList JavaUtils::FindJavaPath()
 | 
			
		||||
{
 | 
			
		||||
	QStringList paths;
 | 
			
		||||
 | 
			
		||||
	HKEY jreKey;
 | 
			
		||||
	QString jreKeyName = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
 | 
			
		||||
	if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, jreKeyName.toStdString().c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &jreKey) == ERROR_SUCCESS)
 | 
			
		||||
	{
 | 
			
		||||
		// Read the current JRE version from the registry.
 | 
			
		||||
		// This will be used to find the key that contains the JavaHome value.
 | 
			
		||||
		char *value = new char[0];
 | 
			
		||||
		DWORD valueSz = 0;
 | 
			
		||||
		if (RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE*)value, &valueSz) == ERROR_MORE_DATA)
 | 
			
		||||
		{
 | 
			
		||||
			value = new char[valueSz];
 | 
			
		||||
			RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE*)value, &valueSz);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		RegCloseKey(jreKey);
 | 
			
		||||
 | 
			
		||||
		// Now open the registry key for the JRE version that we just got.
 | 
			
		||||
		jreKeyName.append("\\").append(value);
 | 
			
		||||
		if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, jreKeyName.toStdString().c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &jreKey) == ERROR_SUCCESS)
 | 
			
		||||
		{
 | 
			
		||||
			// Read the JavaHome value to find where Java is installed.
 | 
			
		||||
			value = new char[0];
 | 
			
		||||
			valueSz = 0;
 | 
			
		||||
			if (RegQueryValueExA(jreKey, "JavaHome", NULL, NULL, (BYTE*)value, &valueSz) == ERROR_MORE_DATA)
 | 
			
		||||
			{
 | 
			
		||||
				value = new char[valueSz];
 | 
			
		||||
				RegQueryValueExA(jreKey, "JavaHome", NULL, NULL, (BYTE*)value, &valueSz);
 | 
			
		||||
 | 
			
		||||
				paths << QDir(PathCombine(value, "bin")).absoluteFilePath("java.exe");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			RegCloseKey(jreKey);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(paths.length() <= 0)
 | 
			
		||||
	{
 | 
			
		||||
		qWarning() << "Failed to find Java in the Windows registry - defaulting to \"java\"";
 | 
			
		||||
		paths << "java";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return paths;
 | 
			
		||||
}
 | 
			
		||||
#elif OSX
 | 
			
		||||
QStringList JavaUtils::FindJavaPath()
 | 
			
		||||
{
 | 
			
		||||
	qWarning() << "OS X Java detection incomplete - defaulting to \"java\"";
 | 
			
		||||
 | 
			
		||||
	QStringList paths;
 | 
			
		||||
	paths << "java";
 | 
			
		||||
 | 
			
		||||
	return paths;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif LINUX
 | 
			
		||||
QStringList JavaUtils::FindJavaPath()
 | 
			
		||||
{
 | 
			
		||||
	qWarning() << "Linux Java detection incomplete - defaulting to \"java\"";
 | 
			
		||||
 | 
			
		||||
	QStringList paths;
 | 
			
		||||
	paths << "java";
 | 
			
		||||
 | 
			
		||||
	return paths;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
QStringList JavaUtils::FindJavaPath()
 | 
			
		||||
{
 | 
			
		||||
	qWarning() << "Unknown operating system build - defaulting to \"java\"";
 | 
			
		||||
 | 
			
		||||
	QStringList paths;
 | 
			
		||||
	paths << "java";
 | 
			
		||||
 | 
			
		||||
	return paths;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										26
									
								
								logic/JavaUtils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								logic/JavaUtils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
 | 
			
		||||
class JavaUtils
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	JavaUtils();
 | 
			
		||||
 | 
			
		||||
	QStringList FindJavaPath();
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user