언리얼 엔진/C++
[언리얼엔진/UE] 프로그램 인스턴스 체크
mane
2024. 3. 4. 23:39
728x90
반응형
인사말
안녕하세요. 이번 포스트에서는 언리얼엔진에서 패키징한 프로그램(.exe)가 윈도우상에서 1개만 존재하는지 체크하고 2개 이상의 프로그램이 중복으로 실행되지 않도록 하는 것에 대해 작성하겠습니다.
사용법
아래의 코드를 참고해서 GameInstace 의 초기화 부분에 함수 또는 코드블럭을 작성해서 넣어주면 게임(프로그램)이 실행될 때 인스턴스를 체크해서 프로그램이 1개만 실행되도록 합니다.
코드
const UGeneralProjectSettings& ProjectSettings = *GetDefault<UGeneralProjectSettings>();
const FString LockFilePath = FPlatformProcess::UserTempDir() + ProjectSettings.ProjectID.ToString();
if (!IFileManager::Get().CreateFileWriter(*LockFilePath, 0))
{
FMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT("애플리케이션은 이미 실행 중입니다.")),FText::FromString(TEXT("알림")));
FPlatformMisc::RequestExit(true);
}
코드 설명
- UGeneralProjectSettings 클래스의 인스턴스에 접근하여 프로젝트 설정을 가져옵니다. 이 설정들은 Unreal Engine 프로젝트의 일반적인 설정을 담고 있습니다.
- ProjectSettings.ProjectID는 현재 프로젝트에 고유하게 할당된 식별자입니다. 이것을 문자열로 변환하고 사용자의 임시 디렉토리 경로에 추가하여 고유한 파일 경로를 생성합니다.
- .FPlatformProcess::UserTempDir() 함수는 현재 사용자의 임시 디렉토리 경로를 반환합니다. 이 경로는 일반적으로 임시 파일을 저장하기 위해 사용됩니다.
- IFileManager::Get().CreateFileWriter(*LockFilePath, 0) 함수는 LockFilePath 경로에 새 파일을 생성하기 위한 FileWriter를 만듭니다. 이 때 파일이 이미 존재하고 열 수 없다면, 즉 다른 인스턴스에서 이미 해당 파일을 사용하고 있다면 nullptr을 반환합니다. 여기서는 파일 생성에 실패할 경우를 체크하고 있습니다.
- 파일 생성이 실패하면 (즉, 애플리케이션이 이미 실행 중이면), FMessageDialog::Open 함수를 사용하여 사용자에게 "애플리케이션은 이미 실행 중입니다."라는 메시지와 함께 확인(Ok) 대화 상자를 표시합니다.
- 마지막으로 FPlatformMisc::RequestExit(true)를 호출하여 애플리케이션을 즉시 종료합니다. 여기서 true 매개변수는 강제 종료를 의미합니다.
728x90
반응형