Win32 API 日本語リファレンス
ホームStorage.FileSystem › VerInstallFileW

VerInstallFileW

関数
バージョンを確認しながらファイルをインストールする。
DLLVERSION.dll文字セットUnicode (-W)呼出規約winapi対応OSWindows 2000 以降

シグネチャ

// VERSION.dll  (Unicode / -W)
#include <windows.h>

VER_INSTALL_FILE_STATUS VerInstallFileW(
    VER_INSTALL_FILE_FLAGS uFlags,
    LPCWSTR szSrcFileName,
    LPCWSTR szDestFileName,
    LPCWSTR szSrcDir,
    LPCWSTR szDestDir,
    LPCWSTR szCurDir,
    LPWSTR szTmpFile,
    DWORD* puTmpFileLen
);

パラメーター

名前方向
uFlagsVER_INSTALL_FILE_FLAGSin
szSrcFileNameLPCWSTRin
szDestFileNameLPCWSTRin
szSrcDirLPCWSTRin
szDestDirLPCWSTRin
szCurDirLPCWSTRin
szTmpFileLPWSTRout
puTmpFileLenDWORD*inout

戻り値の型: VER_INSTALL_FILE_STATUS

各言語での呼び出し定義

// VERSION.dll  (Unicode / -W)
#include <windows.h>

VER_INSTALL_FILE_STATUS VerInstallFileW(
    VER_INSTALL_FILE_FLAGS uFlags,
    LPCWSTR szSrcFileName,
    LPCWSTR szDestFileName,
    LPCWSTR szSrcDir,
    LPCWSTR szDestDir,
    LPCWSTR szCurDir,
    LPWSTR szTmpFile,
    DWORD* puTmpFileLen
);
[DllImport("VERSION.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint VerInstallFileW(
    uint uFlags,   // VER_INSTALL_FILE_FLAGS
    [MarshalAs(UnmanagedType.LPWStr)] string szSrcFileName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string szDestFileName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string szSrcDir,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string szDestDir,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string szCurDir,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szTmpFile,   // LPWSTR out
    ref uint puTmpFileLen   // DWORD* in/out
);
<DllImport("VERSION.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function VerInstallFileW(
    uFlags As UInteger,   ' VER_INSTALL_FILE_FLAGS
    <MarshalAs(UnmanagedType.LPWStr)> szSrcFileName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szDestFileName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szSrcDir As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szDestDir As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szCurDir As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szTmpFile As System.Text.StringBuilder,   ' LPWSTR out
    ByRef puTmpFileLen As UInteger   ' DWORD* in/out
) As UInteger
End Function
' uFlags : VER_INSTALL_FILE_FLAGS
' szSrcFileName : LPCWSTR
' szDestFileName : LPCWSTR
' szSrcDir : LPCWSTR
' szDestDir : LPCWSTR
' szCurDir : LPCWSTR
' szTmpFile : LPWSTR out
' puTmpFileLen : DWORD* in/out
Declare PtrSafe Function VerInstallFileW Lib "version" ( _
    ByVal uFlags As Long, _
    ByVal szSrcFileName As LongPtr, _
    ByVal szDestFileName As LongPtr, _
    ByVal szSrcDir As LongPtr, _
    ByVal szDestDir As LongPtr, _
    ByVal szCurDir As LongPtr, _
    ByVal szTmpFile As LongPtr, _
    ByRef puTmpFileLen As Long) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

VerInstallFileW = ctypes.windll.version.VerInstallFileW
VerInstallFileW.restype = wintypes.DWORD
VerInstallFileW.argtypes = [
    wintypes.DWORD,  # uFlags : VER_INSTALL_FILE_FLAGS
    wintypes.LPCWSTR,  # szSrcFileName : LPCWSTR
    wintypes.LPCWSTR,  # szDestFileName : LPCWSTR
    wintypes.LPCWSTR,  # szSrcDir : LPCWSTR
    wintypes.LPCWSTR,  # szDestDir : LPCWSTR
    wintypes.LPCWSTR,  # szCurDir : LPCWSTR
    wintypes.LPWSTR,  # szTmpFile : LPWSTR out
    ctypes.POINTER(wintypes.DWORD),  # puTmpFileLen : DWORD* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('VERSION.dll')
VerInstallFileW = Fiddle::Function.new(
  lib['VerInstallFileW'],
  [
    -Fiddle::TYPE_INT,  # uFlags : VER_INSTALL_FILE_FLAGS
    Fiddle::TYPE_VOIDP,  # szSrcFileName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szDestFileName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szSrcDir : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szDestDir : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szCurDir : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szTmpFile : LPWSTR out
    Fiddle::TYPE_VOIDP,  # puTmpFileLen : DWORD* in/out
  ],
  -Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"
#[link(name = "version")]
extern "system" {
    fn VerInstallFileW(
        uFlags: u32,  // VER_INSTALL_FILE_FLAGS
        szSrcFileName: *const u16,  // LPCWSTR
        szDestFileName: *const u16,  // LPCWSTR
        szSrcDir: *const u16,  // LPCWSTR
        szDestDir: *const u16,  // LPCWSTR
        szCurDir: *const u16,  // LPCWSTR
        szTmpFile: *mut u16,  // LPWSTR out
        puTmpFileLen: *mut u32  // DWORD* in/out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("VERSION.dll", CharSet = CharSet.Unicode)]
public static extern uint VerInstallFileW(uint uFlags, [MarshalAs(UnmanagedType.LPWStr)] string szSrcFileName, [MarshalAs(UnmanagedType.LPWStr)] string szDestFileName, [MarshalAs(UnmanagedType.LPWStr)] string szSrcDir, [MarshalAs(UnmanagedType.LPWStr)] string szDestDir, [MarshalAs(UnmanagedType.LPWStr)] string szCurDir, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szTmpFile, ref uint puTmpFileLen);
"@
$api = Add-Type -MemberDefinition $sig -Name 'VERSION_VerInstallFileW' -Namespace Win32 -PassThru
# $api::VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
#uselib "VERSION.dll"
#func global VerInstallFileW "VerInstallFileW" wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr
; VerInstallFileW uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, varptr(szTmpFile), varptr(puTmpFileLen)   ; 戻り値は stat
; uFlags : VER_INSTALL_FILE_FLAGS -> "wptr"
; szSrcFileName : LPCWSTR -> "wptr"
; szDestFileName : LPCWSTR -> "wptr"
; szSrcDir : LPCWSTR -> "wptr"
; szDestDir : LPCWSTR -> "wptr"
; szCurDir : LPCWSTR -> "wptr"
; szTmpFile : LPWSTR out -> "wptr"
; puTmpFileLen : DWORD* in/out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "VERSION.dll"
#cfunc global VerInstallFileW "VerInstallFileW" int, wstr, wstr, wstr, wstr, wstr, var, var
; res = VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
; uFlags : VER_INSTALL_FILE_FLAGS -> "int"
; szSrcFileName : LPCWSTR -> "wstr"
; szDestFileName : LPCWSTR -> "wstr"
; szSrcDir : LPCWSTR -> "wstr"
; szDestDir : LPCWSTR -> "wstr"
; szCurDir : LPCWSTR -> "wstr"
; szTmpFile : LPWSTR out -> "var"
; puTmpFileLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; VER_INSTALL_FILE_STATUS VerInstallFileW(VER_INSTALL_FILE_FLAGS uFlags, LPCWSTR szSrcFileName, LPCWSTR szDestFileName, LPCWSTR szSrcDir, LPCWSTR szDestDir, LPCWSTR szCurDir, LPWSTR szTmpFile, DWORD* puTmpFileLen)
#uselib "VERSION.dll"
#cfunc global VerInstallFileW "VerInstallFileW" int, wstr, wstr, wstr, wstr, wstr, var, var
; res = VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
; uFlags : VER_INSTALL_FILE_FLAGS -> "int"
; szSrcFileName : LPCWSTR -> "wstr"
; szDestFileName : LPCWSTR -> "wstr"
; szSrcDir : LPCWSTR -> "wstr"
; szDestDir : LPCWSTR -> "wstr"
; szCurDir : LPCWSTR -> "wstr"
; szTmpFile : LPWSTR out -> "var"
; puTmpFileLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	version = windows.NewLazySystemDLL("VERSION.dll")
	procVerInstallFileW = version.NewProc("VerInstallFileW")
)

// uFlags (VER_INSTALL_FILE_FLAGS), szSrcFileName (LPCWSTR), szDestFileName (LPCWSTR), szSrcDir (LPCWSTR), szDestDir (LPCWSTR), szCurDir (LPCWSTR), szTmpFile (LPWSTR out), puTmpFileLen (DWORD* in/out)
r1, _, err := procVerInstallFileW.Call(
	uintptr(uFlags),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szSrcFileName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szDestFileName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szSrcDir))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szDestDir))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szCurDir))),
	uintptr(szTmpFile),
	uintptr(puTmpFileLen),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // VER_INSTALL_FILE_STATUS
function VerInstallFileW(
  uFlags: DWORD;   // VER_INSTALL_FILE_FLAGS
  szSrcFileName: PWideChar;   // LPCWSTR
  szDestFileName: PWideChar;   // LPCWSTR
  szSrcDir: PWideChar;   // LPCWSTR
  szDestDir: PWideChar;   // LPCWSTR
  szCurDir: PWideChar;   // LPCWSTR
  szTmpFile: PWideChar;   // LPWSTR out
  puTmpFileLen: Pointer   // DWORD* in/out
): DWORD; stdcall;
  external 'VERSION.dll' name 'VerInstallFileW';
result := DllCall("VERSION\VerInstallFileW"
    , "UInt", uFlags   ; VER_INSTALL_FILE_FLAGS
    , "WStr", szSrcFileName   ; LPCWSTR
    , "WStr", szDestFileName   ; LPCWSTR
    , "WStr", szSrcDir   ; LPCWSTR
    , "WStr", szDestDir   ; LPCWSTR
    , "WStr", szCurDir   ; LPCWSTR
    , "Ptr", szTmpFile   ; LPWSTR out
    , "Ptr", puTmpFileLen   ; DWORD* in/out
    , "UInt")   ; return: VER_INSTALL_FILE_STATUS
●VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen) = DLL("VERSION.dll", "dword VerInstallFileW(dword, char*, char*, char*, char*, char*, char*, void*)")
# 呼び出し: VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
# uFlags : VER_INSTALL_FILE_FLAGS -> "dword"
# szSrcFileName : LPCWSTR -> "char*"
# szDestFileName : LPCWSTR -> "char*"
# szSrcDir : LPCWSTR -> "char*"
# szDestDir : LPCWSTR -> "char*"
# szCurDir : LPCWSTR -> "char*"
# szTmpFile : LPWSTR out -> "char*"
# puTmpFileLen : DWORD* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。