Freigeben über


Vermeiden von Systemneustarts bei Geräteinstallationen und Treiber-Updates

Verwenden Sie die folgenden Regeln, um Systemneustarts während der Geräteinstallation zu vermeiden:

  • Verwenden Sie niemals Neustart - oder Neustarteinträge in INF DDInstall-Abschnitten. Diese Direktiven wurden ursprünglich aus Kompatibilität mit Windows 9x/Me bereitgestellt und sollten nicht für Windows 2000 und höhere Versionen von Windows verwendet werden.

  • Verwenden Sie keine COPYFLG_FORCE_FILE_IN_USE- oder COPYFLG_REPLACE_BOOT_FILE-Flags mit INF CopyFiles-Anweisungen, es sei denn, dies ist absolut erforderlich.

  • Stellen Sie sicher, dass alle Dateien in Ihrem Treiberpaketaus dem Treiberspeicher ausgeführt werden.

  • Wenn die Dateien im Treiberpaket nicht aus dem Treiberspeicher ausgeführt werden, weisen Sie jeder neuen Version eines Klasseninstallationsprogramms oder Co-Installers oder einer Dienst-DLL einen neuen Dateinamen zu. Dadurch wird ein Systemneustart vermieden, wenn eine ältere Version verwendet wird. (Wenn kein neuer Dateiname für einen aktualisierten Klasseninstaller oder Klassen-Co-Installer verwendet wird, werden diese neuen Dateien nicht für die Installation verwendet.)

  • Um die Treiber eines Geräts zu aktualisieren, befolgen Sie die Regeln, die unter Aktualisieren von Treiberdateien aufgeführt sind.

Minimieren von Neustarts beim Aktualisieren dateigestützter Treiber

Vor Windows 10 wurden alle Kernelmodustreiber von der Auslagerungsdatei des Systems unterstützt. Daher konnte eine Treiberbinärdatei auf dem Datenträger überschrieben werden, auch wenn der Treiber ausgeführt wurde.

Um die Leistung zu verbessern, werden die meisten Nichtstarttreiber ab Windows 10 stattdessen von der Treiberbinärdatei auf dem Datenträger unterstützt.

Treiberstarttypen, die jetzt dateigeschützt sind, umfassen:

  • SERVICE_SYSTEM_START (0x00000001)

  • SERVICE_AUTO_START (0x00000002)

  • SERVICE_DEMAND_START (0x00000003)

Starttreiber werden weiterhin von der Auslagerungsdatei unterstützt.

Verwenden Sie die folgenden bewährten Methoden, um einen dateigestützten Treiber zu aktualisieren. Andernfalls erfordert das Update möglicherweise zwei Neustarts, einen zum Ersetzen der Datei und einen zweiten zum Laden der neuen Version des Treibers.

Wenn Sie eine INF-Datei verwenden, führen Sie die folgenden Schritte aus:

  1. Ändern Sie den Abschnitt CopyFiles ihrer Treiber-INF-Datei wie folgt, um COPYFLG_IN_USE_RENAME zu verwenden:

    [MyDriver_Install.NT]
    CopyFiles=MyDriverCopy
    
    [MyDriverCopy]
    MyDriver.sys,,,0x00004000  ; COPYFLG_IN_USE_RENAME
    

    Wenn Sie dieses Flag verwenden, versucht Windows, die Treiberdatei auf dem Datenträger zu ersetzen. Weitere Informationen finden Sie unter INF CopyFiles-Direktive.

  2. Wenn der INF für einen PnP-Treiber vorgesehen ist, versucht Windows während der Geräteinstallation, den ausgeführten Treiber zu entladen und die Geräte neu zu starten, die ihn verwenden, um die neue Version des Treibers zu verwenden. Wenn dies fehlschlägt, gibt die Geräteinstallation an, dass das System neu gestartet werden soll.

  3. Wenn der INF nicht für einen PnP-Treiber bestimmt ist und Sie eine Methode wie InstallHInfSection verwenden, um den INF zu verarbeiten, beenden Sie den Treiber manuell, und starten Sie ihn neu:

    • Schließen Sie alle geöffneten Handles für den Treiber, und beenden Sie den Treiber dann mithilfe einer der folgenden Methoden:

      • sc.exe stop <mydriver>

      • ControlService(SERVICE_CONTROL_STOP)

      Weitere Informationen finden Sie unter ControlService-Funktion.

Wenn Sie keine INF-Datei verwenden, führen Sie die folgenden Schritte aus:

  1. Beenden Sie den Treiber, wie oben beschrieben. Ersetzen Sie die alte Treiber-Binärdatei durch die neue.

  2. Wenn Sie den Treiber nicht beenden können, benennen Sie die vorhandene Datei um, kopieren Sie die neue Datei, und richten Sie die vorhandene Datei ein, die in Zukunft gelöscht werden soll (z. B. moveFileEx mit dem flag MOVEFILE_DELAY_UNTIL_REBOOT ). Um mit der Verwendung der neuen Version des Treibers zu beginnen, muss das System neu gestartet werden.

Abschnitte mit Datei- und Auslagerungsdatei

Was bestimmt, wann ein Treiber geladen wird