SetupInstallFromInfSectionW 函式 (setupapi.h)
[此函式可用於需求一節中所述的操作系統。 它在後續版本中可能會變更或無法使用。 安裝程式API不應再用於安裝應用程式。 請改用 Windows Installer 來開發應用程式安裝程式。 SetupAPI 會繼續用於安裝設備驅動器。]
SetupInstallFromInfSection 函式會執行 INF 檔案 Install 區段中的所有指示詞。
如果修改登錄或檔案,則需要此函式的呼叫端具有寫入系統或目標目錄的許可權。
語法
WINSETUPAPI BOOL SetupInstallFromInfSectionW(
HWND Owner,
HINF InfHandle,
PCWSTR SectionName,
UINT Flags,
HKEY RelativeKeyRoot,
PCWSTR SourceRootPath,
UINT CopyFlags,
PSP_FILE_CALLBACK_W MsgHandler,
PVOID Context,
HDEVINFO DeviceInfoSet,
PSP_DEVINFO_DATA DeviceInfoData
);
參數
Owner
視窗句柄的選擇性指標,指向擁有安裝期間產生之任何對話框的視窗,例如磁碟提示或檔案複製。 如果未指定 Owner ,這些對話框會變成最上層視窗。
InfHandle
包含要處理之區段的 INF 檔案句柄。
SectionName
要處理的 INF 檔案中 [安裝 ] 區段的名稱。
Flags
控制要執行的動作。 旗標可以是下列值的組合。
SPINST_INIFILES
在) (UpdateInis、 UpdateIniFields 行執行 INI 檔案作業。
SPINST_REGISTRY
在 [安裝] 區段中 (AddReg、DelReg 行執行登錄作業,) 處理。
SPINST_INI2REG
執行 INI 檔案到登錄作業, (正在處理之安裝區段中的 Ini2Reg 行) 。
SPINST_LOGCONFIG
只有在安裝設備驅動器時,才會使用此旗標。
執行邏輯組態作業, (正在處理之安裝區段中的LogConf行) 。 只有在指定 DeviceInfoSet 和 DeviceInfoData 時,才會使用此旗標。
如需安裝設備驅動器、LogConf、DeviceInfoSet 或 DeviceInfoData 的詳細資訊,請參閱 DDK 程式設計人員指南。
SPINST_FILES
(正在) 處理之 Install 區段中的 CopyFiles、DelFiles、RenFiles 行執行檔案作業。
SPINST_ALL
執行所有安裝作業。
SPINST_REGISTERCALLBACKAWARE
使用 RegisterDlls INF 指示詞在 Windows 2000 上自我註冊 DLL 時, SetupInstallFromInfSection 的呼叫端可能會在註冊或取消註冊時收到每個檔案的通知。 若要將 SPFILENOTIFY_STARTREGISTRATION 或 SPFILENOTIFY_ENDREGISTRATION 通知傳送至回呼例程,請包含SPINST_REGISTERCALLBACKAWARE加上SPINST_REGSVR或SPINST_UNREGSVR。 呼叫端也必須設定 MsgHandler 參數。
SPINST_REGSVR
若要在註冊檔案時將通知傳送至回呼例程,請在 Flags 中包含SPINST_REGISTERCALLBACKAWARE加上SPINST_REGSVR。 呼叫端也必須指定 MsgHandler 參數。
SPINST_UNREGSVR
若要在取消註冊檔案時將通知傳送至回呼例程,請在 Flags 中包含SPINST_REGISTERCALLBACKAWARE加上SPINST_UNREGSVR。 呼叫端也必須指定 MsgHandler 參數。
RelativeKeyRoot
如果 Flags 包含SPINST_REGISTRY或SPINST_INI2REG,則必須指定選擇性參數。 當 INF 檔案將 HKR 指定為機碼時,要當做根目錄使用的登錄機碼句柄。 請注意,如果使用選用的 DeviceInfoSet 和 DeviceInfoData 集合呼叫 SetupInstallFromInfSection,則會忽略此參數。
SourceRootPath
檔案複本的來源根目錄。 例如 A:\ 或 \pegasus\win\install。 如果 Flags 包含SPINST_FILES,且 SourceRootPath 為 NULL,則系統會提供預設的根路徑。
CopyFlags
如果 Flags 包含SPINST_FILES,則必須指定選擇性參數。 指定要在檔案排入佇列以供複製時傳遞至 SetupQueueCopySection 函式的旗標。 這些旗標可以是下列值的組合。
SP_COPY_DELETESOURCE
成功複製時刪除來源檔案。 如果刪除失敗,呼叫端不會收到通知。
SP_COPY_REPLACEONLY
只有在這樣做會覆寫目的地路徑上的檔案時,才複製檔案。
SP_COPY_NEWER_OR_SAME
檢查要複製的每個檔案,以查看其版本資源是否表示其版本是否與目標上現有的複本相同或更新。
版本檢查期間所使用的檔案版本資訊是在VS_FIXEDFILEINFO結構的 dwFileVersionMS 和 dwFileVersionLS 成員中指定的,如版本函式所填入。 如果其中一個檔案沒有版本資源,或它們具有相同的版本資訊,則會將來源檔案視為較新。
如果原始程式檔在版本或更新版本中不相等,而且已指定 CopyMsgHandler ,則呼叫端會收到通知,而且可能會取消複本。 如果未指定 CopyMsgHandler ,則不會複製檔案。
SP_COPY_NEWER_ONLY
檢查所複製的每個檔案,以查看其版本資源是否表示它不是比目標上現有的複本還新。 如果來源檔案較新,但版本不等於現有目標,則會複製檔案。
SP_COPY_NOOVERWRITE
檢查目標檔案是否存在,如果是,請通知可能已複製的呼叫端。 如果未指定 CopyMsgHandler ,則不會覆寫檔案。
SP_COPY_NODECOMP
請勿解壓縮檔案。 設定此旗標時,如果適當) ,目標檔案就不會提供來源名稱的未壓縮格式 (。 例如,將 f:/x86\cmd.ex_複製到 \install\temp 會導致 \install\temp\cmd.ex_ 的目標檔案。 如果未指定SP_COPY_NODECOMP旗標,則會解壓縮檔案,並呼叫目標 \install\temp\cmd.exe。 如果指定 ,DestinationName 的檔名部分會遭到移除,並以來源檔案的檔名取代。 指定SP_COPY_NODECOMP時,無法檢查任何語言或版本資訊。
SP_COPY_LANGUAGEAWARE
檢查要複製的每個檔案,以查看其語言是否與目標上任何現有檔案的語言不同。 若是如此,並指定 CopyMsgHandler ,則會通知呼叫端並取消複本。 如果未指定 CopyMsgHandler ,則不會複製檔案。
SP_COPY_SOURCE_ABSOLUTE
SourceFile 是完整的來源路徑。 請勿在 INF 檔案的 SourceDisksNames 區段中查閱。
SP_COPY_SOURCEPATH_ABSOLUTE
SourcePathRoot 是原始程式檔的完整路徑部分。 忽略檔案所在來源媒體之 INF 檔案 之 SourceDisksNames 區段中指定的相對來源。 如果指定SP_COPY_SOURCE_ABSOLUTE,則會忽略此旗標。
SP_COPY_FORCE_IN_USE
如果目標存在,行為就如同正在使用中,並將檔案排入佇列,以便在下一次系統重新啟動時進行複製。
SP_COPY_IN_USE_NEEDS_REBOOT
如果在複製作業期間使用檔案,通知用戶必須重新啟動系統。 只有在稍後呼叫 SetupPromptReboot 或 SetupScanFileQueue 時,才會使用此旗標。
SP_COPY_NOSKIP
請勿提供使用者略過檔案的選項。
SP_COPY_FORCE_NOOVERWRITE
檢查目標檔案是否存在,如果存在,則不會覆寫檔案。 呼叫端未收到通知。
SP_COPY_FORCE_NEWER
檢查所複製的每個檔案,以查看其版本資源是否 (或非圖像檔案的時間戳,) 指出它是否比目標上現有的複本還新。 如果複製的檔案不是較新,則不會複製檔案。 呼叫端未收到通知。
SP_COPY_WARNIFSKIP
如果用戶嘗試略過檔案,請警告他們略過檔案可能會影響安裝。 (用於系統關鍵檔案。)
MsgHandler
回呼例程的指標。 回呼例程的格式必須是 FileCallback。 如需詳細資訊 ,請參閱通知 。
只有當 Flags 參數不包含SPINST_FILES、SPINST_REGISTERCALLBACKAWARE加SPINST_REGSVR或SPINST_UNREGSVR時,此參數才為選擇性參數。
如果 Flags 包含SPINST_FILES,則必須設定 MsgHandler。 在此情況下,使用 SetupCommitFileQueue 認可檔案佇列時,通知會傳送至回呼例程。
如果 Flags 包含SPINST_REGISTERCALLBACKAWARE加上SPINST_REGSVR或SPINST_UNREGSVR,則必須設定 MsgHandler。 在此情況下,每次在 Windows 2000 上使用 RegisterDlls INF 指示詞註冊或取消註冊檔案時,就會將SPFILENOTIFY_STARTREGISTRATION或SPFILENOTIFY_ENDREGISTRATION傳送至回呼例程。
Context
當這個例程在內部建置的檔案佇列透過 SetupCommitFileQueue 認可時,要傳遞至回調函式的值。 只有在 Flags 參數不包含SPINST_FILES時,Context 參數才為選擇性參數。 如果 Flags 包含 SPINST_FILES,則必須指定這個參數。
DeviceInfoSet
裝置資訊集句柄的選擇性指標。 如需裝置安裝程式安裝函式的詳細資訊,請參閱 DDK 程式設計人員指南。
DeviceInfoData
SP_DEVINFO_DATA 結構的指標 選擇性指標,提供 DeviceInfoSet 所指定集合中特定項目的內容。如需裝置安裝程式安裝函式的詳細資訊,請參閱 DDK 程式設計人員指南。
傳回值
如果函式成功,則傳回值是非零值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
如果 UNC 目錄指定為檔案複製作業的目標目錄,您必須先確定該目錄存在,再呼叫 SetupInstallFromInfSection。 安裝程式函式不會檢查 是否存在,也不會建立 UNC 目錄。 如果目標 UNC 目錄不存在,檔案安裝將會失敗。
此函式需要 Windows INF 檔案。 某些較舊的 INF 檔案格式可能不受支援。
注意
setupapi.h 標頭會將 SetupInstallFromInfSection 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | setupapi.h |
程式庫 | Setupapi.lib |
Dll | Setupapi.dll |
API 集合 | ext-ms-win-setupapi-classinstallers-l1-1-2 (於 Windows 10 10.0.14393 版中引進) |