bool LoadVMOptions()
{
	TCHAR optionsFileName[_MAX_PATH];
	if (LoadString(hInst, IDS_VM_OPTIONS_PATH, optionsFileName, _MAX_PATH-1))
	{
		TCHAR fullOptionsFileName[_MAX_PATH];
		ExpandEnvironmentStrings(optionsFileName, fullOptionsFileName, _MAX_PATH-1);
		
		if (GetFileAttributes(fullOptionsFileName) == INVALID_FILE_ATTRIBUTES)
		{
			GetModuleFileName(NULL, fullOptionsFileName, _MAX_PATH-1);
			_tcscat_s(fullOptionsFileName, _T(".vmoptions"));
		}
		
		std::vector<std::string> vmOptionLines;
		if (LoadVMOptionsFile(fullOptionsFileName, vmOptionLines))
		{
			if (!AddClassPathOptions(vmOptionLines)) return false;
			AddPredefinedVMOptions(vmOptionLines);

			vmOptionCount = vmOptionLines.size();
			vmOptions = (JavaVMOption*) malloc(vmOptionCount * sizeof(JavaVMOption));
			for(int i=0; i<vmOptionLines.size(); i++)
			{
				vmOptions[i].optionString = _strdup(vmOptionLines[i].c_str());
				vmOptions[i].extraInfo = 0;
			}

			return true;
		}
	}
	MessageBox(NULL, _T("Cannot find VM options file"), _T("Error launching IntelliJ Platform"), MB_OK);
	return false;
}
bool LoadVMOptions()
{
    TCHAR buffer[_MAX_PATH];
    TCHAR copy[_MAX_PATH];

    std::vector<std::wstring> files;

    GetModuleFileName(NULL, buffer, _MAX_PATH);
    std::wstring module(buffer);

    if (LoadString(hInst, IDS_VM_OPTIONS_ENV_VAR, buffer, _MAX_PATH))
    {
        if (GetEnvironmentVariableW(buffer, copy, _MAX_PATH)) {
            ExpandEnvironmentStrings(copy, buffer, _MAX_PATH);
            files.push_back(std::wstring(buffer));
        }
    }

    if (LoadString(hInst, IDS_VM_OPTIONS_PATH, buffer, _MAX_PATH))
    {
        ExpandEnvironmentStrings(buffer, copy, _MAX_PATH - 1);
        std::wstring selector(copy);
        files.push_back(selector + module.substr(module.find_last_of('\\')) + L".vmoptions");
    }

    files.push_back(module + L".vmoptions");
    std::wstring used;
    std::vector<std::string> vmOptionLines;

    if (!FindValidVMOptions(files, used, vmOptionLines))
    {
        std::string error = LoadStdString(IDS_ERROR_LAUNCHING_APP);
        MessageBoxA(NULL, "Cannot find VM options file", error.c_str(), MB_OK);
        return false;
    }

    vmOptionLines.push_back(std::string("-Djb.vmOptionsFile=") + EncodeWideACP(used));

    if (!AddClassPathOptions(vmOptionLines)) return false;
    AddPredefinedVMOptions(vmOptionLines);

    vmOptionCount = vmOptionLines.size();
    vmOptions = (JavaVMOption*)malloc(vmOptionCount * sizeof(JavaVMOption));
    for (int i = 0; i < vmOptionLines.size(); i++)
    {
        vmOptions[i].optionString = _strdup(vmOptionLines[i].c_str());
        vmOptions[i].extraInfo = 0;
    }

    return true;
}