Freigeben über


DLL-Serveranforderungen

Während die meisten DLLs in einem Ersatz ausgeführt werden können, können einige DLLs nicht ausgeführt werden.

Die DLL muss sich gut verhalten, wenn Sie das vom System bereitgestellte Ersatz verwenden möchten. Beispielsweise würde eine DLL, die Methoden aufruft, die Rückrufe vom Client registrieren, versuchen, diese Rückrufe aufzurufen, als wären die empfangenen Funktionszeiger für Anweisungen im Adressraum, was nicht der Fall ist. Ebenso funktioniert eine DLL, die eine globale Variable verwendet, auf die der Client zugreifen soll, nicht funktioniert. Im Allgemeinen verhindern Parameter, die nicht ordnungsgemäß gemarstet werden können, dass der DLL-Server außerhalb des Clientprozesses ausgeführt wird. In vielen Fällen können Sie eine benutzerdefinierte Ersatzvorlage schreiben, die speziell entwickelt wurde, um das "schlechte" Verhalten zu kompensieren. (Weitere Informationen finden Sie unter Schreiben eines benutzerdefinierten Ersatz.)

Wenn der DLL-Server benutzerdefinierte Schnittstellen verwendet, müssen Sie sicherstellen, dass Marshallingcode für diese Schnittstellen verfügbar ist. Sie können z. B. eine Proxy-DLL erstellen und registrieren oder eine Typbibliothek bereitstellen und registrieren, die es dem Server ermöglichen würde, ordnungsgemäß zu funktionieren, während er in einem Ersatz ausgeführt wird.

DLL-Server werden nur in einen Ersatzprozess geladen, der im richtigen Sicherheitskontext ausgeführt wird. Der Sicherheitskontext für das DLL-Server-Surrogate wird auf die gleiche Weise wie für EXE-Server bestimmt. Das DLL-Server-Surrogate wird im gleichen Sicherheitskontext wie der Client ausgeführt, es sei denn, ein RunAs Wert, der den Sicherheitskontext bestimmt, wird im AppID Registrierungsabschnitt für den Server festgelegt.

DLL-Surrogates