ホーム › Storage.FileSystem › VerInstallFileW
VerInstallFileW
関数バージョンを確認しながらファイルをインストールする。
シグネチャ
// 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
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| uFlags | VER_INSTALL_FILE_FLAGS | in |
| szSrcFileName | LPCWSTR | in |
| szDestFileName | LPCWSTR | in |
| szSrcDir | LPCWSTR | in |
| szDestDir | LPCWSTR | in |
| szCurDir | LPCWSTR | in |
| szTmpFile | LPWSTR | out |
| puTmpFileLen | DWORD* | 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 方式にも切替可。#uselib "VERSION.dll" #cfunc global VerInstallFileW "VerInstallFileW" int, wstr, wstr, wstr, wstr, wstr, sptr, sptr ; res = VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, varptr(szTmpFile), varptr(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 -> "sptr" ; puTmpFileLen : DWORD* in/out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは 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 方式にも切替可。; 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, intptr, intptr ; res = VerInstallFileW(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, varptr(szTmpFile), varptr(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 -> "intptr" ; puTmpFileLen : DWORD* in/out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは 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_STATUSfunction 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 版の利用を推奨。