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; }