在功能更新期間執行自訂動作
概觀
IT 專業人員可以在功能更新期間和之後執行自己的自訂動作腳本來自訂功能更新。 從 Windows 10 1803 版開始,即可使用自訂動作。
執行自訂動作
關於自訂動作
自訂動作是功能更新程式期間執行的 .cmd 腳本。 這些功能可以在功能更新的四個階段執行:
- 安裝前階段:此階段是在安裝程式啟動時,但先前的相容性檢查。 在這個階段中的動作會在 中
preinstall.cmd
指定。 如果腳本失敗,功能更新將會失敗。 - 認可前階段:此階段是在套用功能更新和系統重新開機之前。 在這個階段中的動作會在 中
precommit.cmd
指定。 如果腳本失敗,功能更新將會失敗。 - 卸載後階段:此階段會在使用者起始功能更新的卸載之後。 在這個階段中的動作會在 中
postuninstall.cmd
指定。postuninstall.cmd
是 Windows 10 2004 版的新功能。 - 完成:此階段是在安裝程式完成之後。 如果功能更新失敗或必須復原,
failure.cmd
則可以用來執行先前自訂腳本的自訂作業或復原動作。 如果功能更新成功,success.cmd
可用來執行功能更新後動作。success.cmd
是 Windows 10 2004 版的新功能。
自訂動作會在 Windows 安裝程式所安裝的功能更新期間執行。 某些 Windows 功能更新是透過每月品質更新來安裝,稍後會透過「啟用套件」來開啟,這是啟動 Windows 功能的小型快速安裝「主要交換器」。 例如,從 Windows 10 版本 2004 更新為 Windows 10 20H2 版。 透過啟用套件安裝的功能更新不支援自訂動作。
自訂動作資料夾結構
自訂動作腳本會從 中的 %windir%\System32\update\
子資料夾執行,視您想要針對單一升級或所有未來的升級執行腳本而定。 Windows 安裝程式會自動在下列位置尋找這些腳本,並在這些腳本存在時執行:
資料夾 | 描述 |
---|---|
%windir%\System32\update\run | Windows 安裝程式會移轉這些資料夾中的腳本,以便在未來的升級中執行。 |
%windir%\System32\update\runonce | 此資料夾中的腳本只會在一個升級中執行,而且未來不會進行升級。 |
%windir%\System32\update\run\ < GUID>%windir%\System32\update\runonce\ < GUID> | 建立唯一的 GUID,以清楚識別您執行的每個腳本。 使用此 GUID 來命名 和 runonce 資料夾中的資料夾 run 。 |
%windir%\System32\update\run\ < GUID > \reflectdrivers%windir%\System32\update\runonce\GUID > \ < reflectdrivers | 此資料夾中的開機關鍵驅動程式將會反映。 請確定 reflectdrivers 資料夾只包含一組必要的加密驅動程式。 擁有比必要更多的驅動程式,可能會對升級案例造成負面影響。 若要深入瞭解反映的驅動程式,請參閱 設備磁碟機 。 |
如果更新失敗或必須復原,則 failure.cmd 腳本可用來執行先前自訂腳本的自訂作業或復原動作。 如果腳本失敗,更新將會失敗。
自訂動作腳本位置和範例
腳本位置
下表顯示執行自訂動作之檔案的資料夾路徑結構:
執行 (腳本將會移轉) | (腳本不會移轉) |
---|---|
%windir%\System32\update\run\ < GUID > \preinstall.cmd | %windir%\System32\update\runonce\GUID > \ < preinstall.cmd |
%windir%\System32\update\run\ < GUID > \precommit.cmd | %windir%\System32\update\runonce\GUID > \ < precommit.cmd |
%windir%\System32\update\run\ < GUID > \postuninstall.cmd | %windir%\System32\update\runonce\GUID > \ < postuninstall.cmd |
%windir%\System32\update\run\ < GUID > \success.cmd | %windir%\System32\update\runonce\ < GUID > \success.cmd |
%windir%\System32\update\run\ < GUID > \failure.cmd | %windir%\System32\update\runonce\ < GUID > \failure.cmd |
%windir%\System32\update\run\ < GUID > \reflectdrivers\example1.inf | %windir%\System32\update\runonce\GUID > \ < reflectdrivers\example2.inf |
%windir%\System32\update\run\ < GUID >\reflectdrivers\example1.sys | %windir%\System32\update\run\ < GUID >\reflectdrivers\example2.sys |
範例檔案路徑和名稱
案例 | 檔案位置範例 |
---|---|
編寫部署資料的腳本 | %windir%\system32\update\ |
移轉目錄 | |
將移轉的腳本 | %windir%\system32\update\run\ |
不會移轉的腳本 | %windir%\system32\update\runonce\ |
具有 GUID 的資料夾路徑 | %windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\ |
使用 GUID 編寫腳本名稱 | |
%windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\preinstall.cmd | |
%windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\precommit.cmd | |
%windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\postuninstall.cmd | |
%windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\failure.cmd | |
%windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\success.cmd | |
%windir%\system32\update\runonce\6971CB27-6F59-43CD-A764-969EE9BBCC1C\preinstall.cmd | |
%windir%\system32\update\runonce\6971CB27-6F59-43CD-A764-969EE9BBCC1C\precommit.cmd | |
%windir%\system32\update\runonce\6971CB27-6F59-43CD-A764-969EE9BBCC1C\postuninstall.cmd | |
%windir%\system32\update\runonce\6971CB27-6F59-43CD-A764-969EE9BBCC1C\failure.cmd | |
%windir%\system32\update\runonce\6971CB27-6F59-43CD-A764-969EE9BBCC1C\success.cmd | |
反映的驅動程式資料夾 | %windir%\system32\update\run\6971CB27-6F59-43CD-A764-969EE9BBCC1C\reflectdrivers\ |