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
반응형
'언리얼 엔진 > C++' 카테고리의 다른 글
[언리얼엔진/C++] FVector::Parallel (두 벡터가 평행한지 여부 확인) (0) | 2024.06.25 |
---|---|
[언리얼엔진] Editor Subsystem (0) | 2024.02.22 |
[언리얼엔진 5] C++ Camera Shake 사용법 (0) | 2024.01.11 |
[언리얼엔진] C++ 에디터 툴바 버튼으로 에디터 유틸리티 위젯 블루프린트 열기 (0) | 2023.12.18 |
[언리얼엔진] C++ 커스텀 구조체를 데이터테이블에서 사용하기 (0) | 2023.08.06 |