XML 파일로 작업하는 Qt 응용 프로그램을 개발 중입니다. 성능을 높이기 위해 Qt의 dom 파서 대신 pugixml 파서를 사용합니다. 컴파일 한 후 내 응용 프로그램과 모든 종속성 (dll 파일, 도우미 프로그램)은 winapi 응용 프로그램의 리소스로 압축되어 단일 exe 파일을 만듭니다.손상된 winapi 실행 파일 매니페스트
QString::toStdString()
을 QString::toStdWString()
으로 바꿀 때까지 모든 것이 잘 작동했습니다. 그 이유는 pugixml에 이름 (ąęśćłóźżń
)의 확장 문자가있는 파일을 읽는 것입니다. 이전에 Qt 재귀 디렉토리 루프에 의해로드 된 데이터를 가지고 pugixml::document::load_file()
을 실행했습니다. 파일 이름을 포함하는 QString
은 std::wstring
으로 변환 된 후 const wchar_t*
으로 변환되어 qstring.toStdWString().c_str()
으로 변환됩니다.
string
을 wstring
으로 바꾸면 압축이 풀린 실행 파일이 잘 작동합니다. -w64 쉘는 MinGW로 컴파일,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates below indicates application support for Windows
7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!--The ID below indicates application support for Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!--The ID below indicates application support for Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!--The ID below indicates application support for Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibili
나는 윈도우 7 64 비트를 사용하고 있습니다 : 그러나, 포장 후, 최종 .exe 파일은 다음과 같습니다 손상된 매니페스트가 있습니다. 최종 패키지의 메이크 파일은 다음과 같습니다
all: final.exe
final.exe: sad.o res.o
g++ -o final.exe -static-libgcc sad.o res.o resource.o -lcomctl32 -lshlwapi -mwindows
sad.o: sad.cpp
g++ -c sad.cpp
res.o: sad.rc resource.h resource.cpp
windres sad.rc res.o
g++ -c resource.cpp
clean:
rm -f *o final.exe
(res.o
프로그램을 포함하고한데로 의해 포장 모든 종속성은 sad.cpp
자원에서 내 응용 프로그램을 호출하는 WINAPI 프로그램을 포함).
손상된 매니페스트는 무엇입니까? – andlabs
질문에 포함되어 있습니다. 모든 노드가 닫히기 전에 XML이 중지됩니다. –
그러면 매니페스트 리소스를 생성하는 코드를 확인해야합니다. – andlabs