Пример #1
0
bool FVSAccessorModule::RunVisualStudioAndOpenSolution() const
{
	bool bSuccess = false;

	FString Path;
	if ( CanRunVisualStudio( Path ) )
	{
		FString Params;
		if ( FModuleManager::Get().IsSolutionFilePresent() )
		{
			Params += TEXT("\"");
			Params += FModuleManager::Get().GetSolutionFilepath();
			Params += TEXT("\"");

			FProcHandle WorkerHandle = FPlatformProcess::CreateProc( *Path, *Params, true, false, false, NULL, 0, NULL, NULL );
			if ( WorkerHandle.IsValid() )
			{
				bSuccess = true;
			}
			WorkerHandle.Close();
		}
	}

	return bSuccess;
}
bool FVisualStudioSourceCodeAccessor::OpenVisualStudioFilesInternalViaProcess(const TArray<FileOpenRequest>& Requests)
{
	::DWORD ProcessID = 0;
	FString Path;
	const FString SolutionPath = GetSolutionPath();
	switch (AccessVisualStudioViaProcess(ProcessID, Path, SolutionPath, GetPrioritizedVisualStudioVersions(SolutionPath)))
	{
	case EAccessVisualStudioResult::VSInstanceIsOpen:
		return RunVisualStudioAndOpenSolutionAndFiles(Path, "", &Requests);
	
	case EAccessVisualStudioResult::VSInstanceIsNotOpen:
		if (CanRunVisualStudio(Path, SolutionPath))
		{
			return RunVisualStudioAndOpenSolutionAndFiles(Path, SolutionPath, &Requests);
		}
		break;

	default:
		// Do nothing if we failed the VS detection, otherwise we could get stuck in a loop of constantly 
		// trying to open a VS instance since we can't detect that one is already running
		break;
	}

	return false;
}
bool FVisualStudioSourceCodeAccessor::RunVisualStudioAndOpenSolution() const
{
	FString Path;
	const FString SolutionPath = GetSolutionPath();
	if (CanRunVisualStudio(Path, SolutionPath))
	{
		return RunVisualStudioAndOpenSolutionAndFiles(Path, SolutionPath, nullptr);
	}

	return false;
}