共用方式為


VerInstallFileW 函式 (winver.h)

根據 VerFindFile 函式傳回的資訊來安裝指定的檔案。 VerInstallFile 會視需要解壓縮檔案,指派唯一的檔案名,並檢查是否有錯誤,例如過時的檔案。

語法

DWORD VerInstallFileW(
  [in]      DWORD   uFlags,
  [in]      LPCWSTR szSrcFileName,
  [in]      LPCWSTR szDestFileName,
  [in]      LPCWSTR szSrcDir,
  [in]      LPCWSTR szDestDir,
  [in]      LPCWSTR szCurDir,
  [out]     LPWSTR  szTmpFile,
  [in, out] PUINT   puTmpFileLen
);

參數

[in] uFlags

類型: DWORD

此參數可以是下列其中一個值。 所有其他位都會保留。

意義
VIFF_FORCEINSTALL
0x0001
不論版本號碼不相符,都會安裝檔案。 函式只會在安裝期間檢查實體錯誤。
VIFF_DONTDELETEOLD
0x0002
如果先前安裝的檔案不在目的地目錄中,則安裝檔案而不刪除先前安裝的檔案。

[in] szSrcFileName

類型: LPCTSTR

要安裝的檔案名。 這是 szSrcDir 參數所指向目錄中的檔案名;檔案名只能包含檔案名和副檔名,而不是路徑。

[in] szDestFileName

類型: LPCTSTR

名稱 VerInstallFile會在安裝時提供新檔案。 此檔案名可能與 szSrcFileName 目錄中的檔案名不同。 新名稱應該只包含檔案名和副檔名,而不是路徑。

[in] szSrcDir

類型: LPCTSTR

可找到檔案的目錄名稱。

[in] szDestDir

類型: LPCTSTR

應該安裝檔案的目錄名稱。 VerFindFile 會在其 szDestDir 參數中傳回此值。

[in] szCurDir

類型: LPCTSTR

找到此檔案的預先存在版本之目錄名稱。 VerFindFile 會在其 szCurDir 參數中傳回此值。

[out] szTmpFile

類型: LPTSTR

原始程式檔的暫存複本名稱。 緩衝區長度至少應 _MAX_PATH 個字元,不過這並非必要,而且在輸入上應該是空的。

[in, out] puTmpFileLen

類型: PUINT

szTmpFile緩衝區的長度。 此指標不得為 Null

當函式傳回時, lpuTmpFileLen 會接收 szTmpFile中所傳回資料的大小,以字元為單位,包括終止 Null 字元。 如果緩衝區太小而無法包含所有資料, lpuTmpFileLen 將會是保存資料所需的緩衝區大小。

傳回值

類型: DWORD

傳回值是指出例外狀況的位元遮罩。 它可以是下列一或多個值。 所有其他值都會保留。

傳回碼/值 描述
VIF_ACCESSVIOLATION
0x00000200L
讀取、建立、刪除或重新命名作業因存取違規而失敗。
VIF_BUFFTOOSMALL
0x00040000L
szTmpFile緩衝區太小,無法包含暫存原始程式檔的名稱。 當函式傳回時, lpuTmpFileLen 包含保存檔案名所需的緩衝區大小。
VIF_CANNOTCREATE
0x000000800L
函式無法建立暫存檔案。 特定錯誤可由另一個旗標描述。
VIF_CANNOTDELETE
0x00001000L
函式無法刪除目的地檔案,或無法刪除位於另一個目錄中的現有檔案版本。 如果 已設定VIF_TEMPFILE 位,則安裝失敗,而且目的地檔案可能無法刪除。
VIF_CANNOTDELETECUR
0x00004000L
無法刪除現有的檔案版本,且未指定 VIFF_DONTDELETEOLD
VIF_CANNOTLOADCABINET
0x00100000L
函式無法載入封包檔案。
VIF_CANNOTLOADLZ32
0x00080000L
函式無法載入壓縮檔案。
VIF_CANNOTREADDST
0x00020000L
函式無法讀取目的地 (現有的) 檔案。 這可防止函式檢查檔案的屬性。
VIF_CANNOTREADSRC
0x00010000L
函式無法讀取來源檔案。 這可能表示路徑未正確指定。
VIF_CANNOTRENAME
0x00002000L
函式無法重新命名暫存檔,但已經刪除目的地檔案。
VIF_DIFFCODEPG
0x00000010L
新檔案需要目前執行之系統版本無法顯示的字碼頁。 呼叫具有VIFF_FORCEINSTALL旗標集的VerInstallFile,即可覆寫此錯誤。
VIF_DIFFLANG
0x00000008L
新的和預先存在的檔案有不同的語言或字碼頁值。 您可以再次呼叫 VerInstallFile 並設定 VIFF_FORCEINSTALL 旗標來覆寫此錯誤。
VIF_DIFFTYPE
0x00000020L
新檔案的類型、子類型或作業系統與預先存在的檔案不同。 您可以再次呼叫 VerInstallFile 並設定 VIFF_FORCEINSTALL 旗標來覆寫此錯誤。
VIF_FILEINUSE
0x00000080L
預先存在的檔案正由系統使用中,因此無法刪除。
VIF_MISMATCH
0x00000002L
新的和預先存在的檔案在一或多個屬性中有所不同。 藉由再次呼叫 VerInstallFile 並設定 VIFF_FORCEINSTALL 旗標,即可覆寫此錯誤。
VIF_OUTOFMEMORY
0x00008000L
函式因記憶體不足而無法完成要求的作業。 一般而言,這表示應用程式記憶體不足,嘗試擴充壓縮檔案。
VIF_OUTOFSPACE
0x00000100L
由於目的地磁片磁碟機上的磁碟空間不足,此函式無法建立暫存檔。
VIF_SHARINGVIOLATION
0x00000400L
讀取、建立、刪除或重新命名作業因共用違規而失敗。
VIF_SRCOLD
0x00000004L
要安裝的檔案比預先存在的檔案還舊。 藉由再次呼叫 VerInstallFile 並設定 VIFF_FORCEINSTALL 旗標,即可覆寫此錯誤。
VIF_TEMPFILE
0x00000001L
新檔案的暫存複本位於目的地目錄中。 失敗的原因會反映在其他旗標中。
VIF_WRITEPROT
0x00000040L
預先存在的檔案受到寫入保護。 藉由再次呼叫 VerInstallFile 並設定 VIFF_FORCEINSTALL 旗標,即可覆寫此錯誤。

備註

此函式適用于 16 位、32 位和 64 位檔案映射。

VerInstallFile 會將檔案從來源目錄複寫到目的地目錄。 如果 szCurDir 指出系統上存在舊版的檔案, VerInstallFile 會比較檔案的版本戳記資訊。 如果先前安裝的檔案版本比新版本還新,或檔案的屬性明顯不同,例如,如果它們使用不同的語言, 則 VerInstallFile 會 傳回一或多個可復原的錯誤碼。

VerInstallFile 會將暫存檔案保留在目的地目錄中。 應用程式可以覆寫錯誤或刪除暫存檔案。 如果應用程式覆寫錯誤, VerInstallFile 會刪除先前安裝的版本,並使用原始檔案名重新命名暫存檔案。

注意

winver.h 標頭會將 VerInstallFile 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程式碼,可能會導致編譯或執行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winver.h (包含 Windows.h)
程式庫 Version.lib
Dll Api-ms-win-core-version-l1-1-0.dll

另請參閱

概念

參考

VerFindFile

版本資訊