2013-02-26 2 views
3

현재 C++과 Qt를 사용하는 응용 프로그램을 개발 중이며 입력 파일이 실행 가능한지 알아야합니다.QFileInfo :: isExecutable()이 ".msi"파일에 대해 false를 반환하는 이유는 무엇입니까?

.msi 확장명이 false 인 경우를 제외하고 대부분의 파일에서 올바르게 작동하는 QFileInfo::isExecutable()을 사용하고 있습니다.

파일이 실행 가능 여부를 어떻게 확인할 수 있습니까? 호환성을 위해 Qt에서이 작업을 수행해야합니다.

답변

3

당신은 QFileInfo::isExecutable() 실행 파일로 파일을 결정하는 방법을 알고 있어야합니다 : 파일의 확장자는 내용을 확인하지 않고 .exe, .com.bat 인 경우 윈도우 Qt는에서

  • 그냥 확인합니다.

  • 유닉스 계열 시스템에서는 파일의 속성을 검사하고 실행 권한이있는 파일에 대해 true를 반환합니다.

따라서 .msi 파일은 Windows에서 Qt를 볼 때 실행 파일이 아닙니다.

+0

감사합니다. 나는 새로운 조건을 추가했고 파일의 확장자를 수동으로 확인하여 다른 응용 프로그램없이 실행될 수있는'.msi','.msp' 또는 다른 확장자가 아닌지 확인했습니다. – zozermania

+1

@ zozermania : 정확성을 위해 msi 파일은 실행 가능하지 않습니다. msi 파일을 사용하려면 다른 응용 프로그램이 필요합니다. 해당 응용 프로그램은 [Windows Installer] (http://en.wikipedia.org/wiki/Windows_Installer)입니다. 물론 Windows에 설치되지만, 특히 오래된 컴퓨터 및 새 소프트웨어의 경우 Windows Installer를 최신 버전으로 업데이트하기 전에 msi 설치 패킷을 설치할 수 없습니다. 예를 들어 필요한 실제 응용 프로그램이 msiexec.exe임을 모른 채 QProcess를 사용하여 msi 파일을 시작할 수 없습니다. –

5

음, MSI 파일은 실제로 실행 가능하지 않습니다. Windows Installer 실행 파일에서 사용하는 문서 형식입니다. 따라서 QFileInfo이 맞습니다.

해결해야 할 구체적인 문제는 무엇입니까? 파일이 실행 가능하다는 것을 아는 것이 왜 당신을 도울 것이라고 생각합니까? 당신이 염두에두고있는 목표는 무엇입니까? 더 많은 정보를 주시면보다 나은 접근 방법을 제안 할 수 있습니다.

+0

사용자가 특정 파일을 입력 할 수 있도록 허용하는 버그가 수정되었습니다. 실행 파일을 제외하고 모든 파일을 받아 들일 것으로 가정하고 Windows와 Linux에서 모두 작동하는 메서드를 찾으려고 노력하고 있지만,없는 경우 Windows 전용 솔루션도 좋습니다. – zozermania

+0

@M M. 당신은 무엇을 의미합니까? 대답은 매우 정확합니다. msi 파일은 .txt 파일 이상으로 실행 파일이 아닙니다. –

+0

@Roku : ** Qt가 실행 파일을 결정하는 방법과 관련이 없으며 사람들에게 오해의 소지가 있습니다. – deepmax

관련 문제