Frage

Visual Studio 2010 installiert Version ... 4974 der VC9 Laufzeit, die . PDBS sind nicht verfügbar . Wie kann ich meinen GME.exe zwingen, eine ältere VC9 Laufzeit zu benutzen?

Ich habe dies in GME.exe.config versucht setzen:

<?xml version="1.0"?>
<configuration>
  <windows>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity type="win32" name="GME" processorArchitecture="x86" version="1.0.0.1"/>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86" />
        <bindingRedirect oldVersion="9.0.21022.8-9.0.21022.4974" newVersion="9.0.30729.4148" />
        <bindingRedirect oldVersion="9.0.30729.0-9.0.30729.4974" newVersion="9.0.30729.4148" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86" />
        <bindingRedirect oldVersion="9.0.21022.8-9.0.21022.4974" newVersion="9.0.30729.4148" />
        <bindingRedirect oldVersion="9.0.30729.0-9.0.30729.4974" newVersion="9.0.30729.4148" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.ATL" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86" />
        <bindingRedirect oldVersion="9.0.21022.8-9.0.21022.4974" newVersion="9.0.30729.4148" />
        <bindingRedirect oldVersion="9.0.30729.0-9.0.30729.4974" newVersion="9.0.30729.4148" />
      </dependentAssembly>
    </assemblyBinding>
  </windows>
</configuration>

Allerdings sxstrace Berichte:

INFO: Resolving reference Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
....
INFO: Publisher Policy redirected assembly version.

Hinzufügen <publisherPolicy apply="no"/> unter <dependentAssembly> Ergebnisse in ERROR: Activation Context generation failed. ohne weitere hilfreiche Informationen zu Windows 7.

Hinweis: Dies ist nur für meine lokale Kopie debuggen, nicht Umverteilung, so dass ich nicht zu Sicherheitsupdates oder andere Leistungen des Herausgebers Politik besorgt bin.

War es hilfreich?

Lösung 2

Hier ist der Trick, um die Anwendung Config zur Arbeit mit Win2003 zu bekommen und später:

http: / /www.tech-archive.net/Archive/VC/microsoft.public.vc.ide_general/2008-01/msg00033.html

Im Grunde braucht man die App auf die Kompatibilitätsdatenbank mit „EnableAppConfig“

hinzufügen

Dies ist dokumentiert hier:

http://msdn.microsoft.com /en-us/library/ee710783%28VS.85%29.aspx

Arbeits GME.exe.Config:

<?xml version="1.0"?>
<configuration>
  <windows>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        <publisherPolicy apply="no"/>
        <bindingRedirect oldVersion="9.0.21022.0-9.0.21022.4974" newVersion="9.0.30729.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86"/>
        <publisherPolicy apply="no"/>
        <bindingRedirect oldVersion="9.0.21022.0-9.0.21022.4974" newVersion="9.0.30729.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.ATL" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86"/>
        <publisherPolicy apply="no"/>
        <bindingRedirect oldVersion="9.0.21022.0-9.0.21022.4974" newVersion="9.0.30729.1" />
      </dependentAssembly>

    </assemblyBinding>
  </windows>
</configuration>

Es scheint, man braucht auch diese für geladenen .dlls zu tun.

Andere Tipps

Die Antwort kommt von http://blog.kalmbachnet.de/?postid=80

Der Trick ist, sich aus der Anwendung manifestieren das publicKey Attribut auf dem assemblyIdentity zu entfernen, so WinSxS nicht verwendet wird.

GME.exe.manifest:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.4148" processorArchitecture="x86">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.30729.4148" processorArchitecture="x86">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.ATL" version="9.0.30729.4148" processorArchitecture="x86">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Embed das Manifest in GME.exe (Ersatz 1 für 2 zur Modifizierung dlls):
mt -manifest GME.exe.manifest -outputresource:GME.exe;1

Kopieren Sie dann die erforderlichen DLLs:
cp -a windows/winsxs/x86_microsoft.vc90.{atl,crt,mfc}*30729.4148*/*dll path-to-app/

Dann erstellen Manifeste für jede Assembly, dass SxS ist nicht für und an die Anwendung nächste Mal benutzt wird, platzieren. Die Manifeste basieren auf z.B. C:\Windows\WinSxS\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.manifest:
Microsoft.VC90.CRT.Manifest:

<?xml version="1.0"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.4148" processorArchitecture="x86"></assemblyIdentity>
    <file name="msvcr90.dll"></file>
    <file name="msvcp90.dll"></file>
    <file name="msvcm90.dll"></file>
</assembly>

Es ist nicht möglich, die Montage Referenzen aus dem Anwendungsmanifest zu entfernen, da die CRT beklagt, dass es nicht über SxS geladen wird.

Leider scheint es, muss man das Manifest für jede abhängige DLL in der Anwendung ändern, einschließlich der DLLs von WinSxS kopiert oder mehrere Versionen geladen werden kann.

Hier ist ein Bash-Skript, die für mich gearbeitet, wo ~ / Documents / SxS-Hack / enthält die CRT-DLLs und modifizierte Manifeste:

rm -rf bin
mkdir bin
cp -a ~/Documents/sxs-hack/* bin/
find -iname \*.dll -or -iname \*.ocx -or -iname \*.exe | while read -r file; do
  cp -a "$file" bin/"$(basename $file)"
  export file=bin/"$(basename $file)"
  export res=$file\;2
  if [ ${file:${#file}-3} = "exe" ]; then export res=$file\;1; fi
  echo $file
  mt.exe -nologo -inputresource:"$res" -out:extracted.manifest &&
  perl -pli -e 's/(Microsoft.VC90.[^>]*)version="[^"]*"([^>]*)publicKeyToken="[^"]*"/$1 $2 version="9.0.30729.4148"/g;' extracted.manifest &&
  mt -nologo -manifest extracted.manifest -outputresource:"$res"
  regsvr32 /s "$file" || true
done

Wenn Sie die Quelle haben können Sie immer statisch die C-Runtime-Bibliothek verknüpfen, dass Sie verwenden möchten ... nicht immer die beste Idee, aber wenn Sie haben ein Monster Bibliothek geerbt, die nur im Debug-Modus ausgeführt wird und kann nicht den Debug-CRT weiterzuverbreiten der Trick tun werde ...

Hier ist, wie der Verlag Politik auf Vista deaktivieren oder 7:

Navigieren Sie zu HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ SideBySide \ Winners \ x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_none_02d0010672fd8219 \ 9.0

Stellen Sie den Standardschlüssel auf die Version, die Sie wollen, zum Beispiel 9.0.30729.4148. Stellen Sie die Version, die Sie nicht auf 0 möchten, zum Beispiel "9.0.30729.4974" = 00.

Sie müssen dies tun, für crt, atl, mfc, etc.

WinSxS scheint die Politik cachen. Dieser arbeitete für mich: touch (1) die Anwendung, dann Satz HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ SideBySide \ PublisherPolicyChangeTime etwas niedrig, z.B. 10.

Dies wird die aktuelle Laufzeit für das gesamte System deaktivieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top