2011-01-12 12 views
4

Wir haben eine Windows-Anwendung (. NET, VS2010), die eine alte eingewickelte ActiveX-Steuerelement verwendet (VSPrinter 8 von ComponentOne, um genau zu sein. Vsprint8.ocx). Dies behandelt alle unsere Druck- und Druckvorschauen. Wenn wir unsere Anwendung auf einer neuen Instanz von Win7 auf einer VM (32 Bit) bereitstellen und ausführen und etwas versuchen, dieses Steuerelement aufzurufen, wird der folgende Fehler angezeigt:"Versuch, geschützten Speicher zu lesen oder zu schreiben" Fehler auf Win7 - ActiveX-Steuerelement Fehler

"Versuch, geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist. "

Es funktioniert weiterhin gut unter Windows XP. Interessanterweise funktioniert die Anwendung, wenn wir DEP auf der Ziel-VM deaktivieren (systemweit auf AlwaysOff gesetzt). Aber wenn wir DEP nur für die ausführbare Datei deaktivieren, die den OCX verwendet, funktioniert es nicht.

Irgendwelche Ideen? Vielen Dank!

Antwort

5

Eine Lösung gefunden.

Ich kann nicht effektiv deaktivieren DEP auf der ausführbare Datei in Frage, so fügte ich die folgenden Zeilen in der Post-Build-Ereignisse Befehlszeile in VS2010 und es behob mein Problem:

call "$(DevEnvDir)\..\..\VC\bin\vcvars32.bat" 
call "$(DevEnvDir)\..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)" 

Im VS Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt unter der Projektmappe, wählen Sie Eigenschaften und klicken Sie auf Ereignisse erstellen. Sie sehen die "Post-Build-Ereignis Befehlszeile:" Textfeld, wo Sie die oben genannten Sachen einstecken.

Dies deaktiviert DEP für meine App. Hier ist der Blogbeitrag, der mir geholfen hat, das Licht zu sehen. Danke, zufälliger Typ!

http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other-memory-is-corrupt.aspx

+1

Vergessen Sie nicht, Ihre Antwort als Antwort auf Ihre Frage zu akzeptieren. ;> – dthorpe

+1

Ein weiterer interessanter Knick ist auf dem TFS Team Build Server aufgetreten. Msbuild konnte die Visual Studio-Umgebungsvariable (DevEnvDir) nicht auflösen, wodurch der fortlaufende Integrationsbuild fehlschlägt. Um dies zu umgehen, haben wir eine Umgebungsvariable auf Systemebene hinzugefügt, um einen globalen Wert von DevEnvDir festzulegen. Der Wert von DevEnvDir ist "C: \ Programme (X 86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE" auf X 64 oder "C: \ Programme \ Microsoft Visual Studio 10.0 \ Common7 \ IDE" auf 32 Bit. Es schien irgendwie hacky, aber es funktionierte. – Booberry

Verwandte Themen