2016-10-25 3 views
0

ich eine Manifest-Datei haben und den Befehl mt in Make-Datei verwenden Sie es in einer meiner exe-Dateien hinzufügen. Nachdem es installiert ist. Wenn ich DPI Awareness Enabler verwenden oder die Registrierung überprüfen in HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ Currentversion \ AppCompatFlags \ Ebenen, zeigt es nicht alles interessant. Normalerweise, wenn ich die Kompatibilität zu Windows 7 manuell festlege und die DPI-Skalierung in der Dateieigenschaft deaktiviere, würde dies in DPI Awareness Enabler und der Registrierung angezeigt.Wie manifestieren verwenden deaktivieren DPI steuern Skalierung und Kompatibilität

So bin ich recht ist nicht nur die eigentliche Datei zu GUI verknüpft zu übernehmen registrieren? Als ob ich den Befehl mt verwenden würde, um die Manifestdatei aus der exe zu extrahieren, kann ich meine ursprüngliche Manifestdatei sehen.

Vor allem glaube ich nicht meine Manifest-Datei funktioniert wie erwartet. Die Art, wie ich es teste, besteht darin, einen Fehler in der App zu reproduzieren. Die Problemumgehung ist Kompatibilität zu Windows 7 festgelegt und DPI-Skalierung in Dateieigenschaft deaktivieren. Wenn ich die installierte Datei nur mit eingebetteter Manifestdatei verwende, wird das Problem nicht gelöst. Aber wenn ich es manuell in der Eigenschaft ändere, löst es den Fehler.

Einige zusätzlichen Informationen wird die App mit VS2010 mit Hotfix gebaut, um die offensichtliche Warnung zu beheben. Nicht sicher, ob das der Grund ist.

Jede Hilfe wäre willkommen.

Hier ist die Manifest-Datei

<?xml version="1.0" encoding="UTF-8"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0"> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!-- Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" /> 
    </application> 
    </compatibility> 
    <asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
     <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
    </asmv3:application> 
</assembly> 

Hier ist der Teil in Makefile

ADD_CUSTOM_COMMAND(
     TARGET myExe 
     POST_BUILD 
     COMMAND "mt.exe" -manifest \"${CMAKE_SOURCE_DIR}\\res\\dpiaware.manifest\" -inputresource:\"$<TARGET_FILE:myExe>\"\;\#1 -outputresource:\"$<TARGET_FILE:myExe>\"\;\#1 
     COMMENT "Adding display aware manifest..." 
    ) 
+0

mt.exe Verwendbarkeit vergleicht ungünstig zu einem Bleiballon. Sie können nicht -manifest und -inputresource verwenden. Letzteres gewinnt, Sie werden gerade das gleiche Manifest einbetten, das bereits in der EXE-Datei vorhanden ist. Lassen Sie das Argument -inputresource aus, um weiter zu kommen. –

+0

Ich bin mir nicht sicher. Von der MSDN scheint es, dass Sie mt sowohl mit -inputresource als auch -manifest ausführen können. https://msdn.microsoft.com/en-us/library/windows/desktop/aa375649(v=vs.85).aspx Aber ich werde es versuchen. – Jerry

Antwort

0

Ok, ich schließlich auf dem Manifest Lösung geben. Genau so passieren wir wix. Daher füge ich einige Registrierungswerte zu HKLM-> SOFTWARE-> Microsoft-> ​​Windows NT-> CurrentVersion-> AppCompatFlags-> Layers während der Installation hinzu.

Verwandte Themen