2016年03月01日


VBScript を『管理者として実行する』


' Shell.Application を使用する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	' 引数無しの単純な実行の場合のみ、runas で自分自身を呼び出す
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' ここが実行された時、管理者権限で実行している事になります

VBScript から利用可能な Shell の機能( Shell.Application )を使って、右クリックメニューにある『管理者として実行』を実行する方法です。

引数なしで実行された場合に、引数をダミーで一つセットして( この場合一つめの runas がそうです )自分自身を呼び出すと言う単純な手法を使用しています。ですから、管理者権限で引数を渡すのは少し面倒になるので、外部ファイルから入力するのがいいと思います。




posted by at 2016-03-01 11:05 | VBScript | このブログの読者になる | 更新情報をチェックする

2010年06月27日


VBScript : 自分自身をCscript.exe で実行しなおすには

WScript.FullName には、その時使用された Wscript.exe か Cscript.exe の
フルパスが入っていますので、その内容が Wscript.exe であれば、Cscript.exe
で自分自身を実行して、現在の処理は終了してやります。

引数はそのまま全てを文字列に作りなおして呼び出してやるといいです。
Set WshShell = CreateObject( "WScript.Shell" )

' フルパス
strPath = WScript.FullName
strTarget = Right( strPath, 11 )
strTarget = Ucase( strTarget )

' CSCRIPT.EXE で無い場合
if strTarget <> "CSCRIPT.EXE" then
	' 自分自身ののフルパス
	strMyPath = WScript.ScriptFullName
	strParam = " "
	' 引数を全て読みだして、スペースが含まれていた場合は再度引き渡す
	' 為に " で囲み直しています
	For I = 0 to Wscript.Arguments.Count - 1
		if instr(Wscript.Arguments(I), " ") < 1 then
			strParam = strParam & Wscript.Arguments(I) & " "
		else
			strParam = strParam & """" & Wscript.Arguments(I) & """ "
		end if
	Next
	Call WshShell.Run( "cscript.exe """ & strMyPath & """" & strParam, 3 )
	WScript.Quit

end if

' テストの為 強制的に GUI で結果表示
MsgBox( WScript.FullName )
For I = 0 to Wscript.Arguments.Count - 1
	MsgBox( Wscript.Arguments(I) )
Next

関連する記事

VBScript : WEBWSH : Wscript で実行された場合は Cscript で実行しなおす


posted by at 2010-06-27 12:53 | VBScript | このブログの読者になる | 更新情報をチェックする

2009年06月21日


VBScript : ディレクトリ選択



Set Shell = CreateObject( "Shell.Application" )
Set objFolder = Shell.BrowseForFolder( 0, "フォルダ選択", &H4B, &H5 )
if objFolder is nothing then
	WScript.Quit
end if
if not objFolder.Self.IsFileSystem then
	WScript.Echo "ファイルシステムではありません"
	WScript.Quit
end if

WScript.Echo objFolder.Self.Path

4番目の引数は省略できますが、省略しない場合は以下の一覧から選択します。システムで定義された数値か "C:\TMP" というような文字列でもかまいません
typedef enum {
	ssfALTSTARTUP = 0x1d,
	ssfAPPDATA = 0x1a,
	ssfBITBUCKET = 0x0a,
	ssfCOMMONALTSTARTUP = 0x1e,
	ssfCOMMONAPPDATA = 0x23,
	ssfCOMMONDESKTOPDIR = 0x19,
	ssfCOMMONFAVORITES = 0x1f,
	ssfCOMMONPROGRAMS = 0x17,
	ssfCOMMONSTARTMENU = 0x16,
	ssfCOMMONSTARTUP = 0x18,
	ssfCONTROLS = 0x03,
	ssfCOOKIES = 0x21,
	ssfDESKTOP = 0x00,
	ssfDESKTOPDIRECTORY = 0x10,
	ssfDRIVES = 0x11,
	ssfFAVORITES = 0x06,
	ssfFONTS = 0x14,
	ssfHISTORY = 0x22,
	ssfINTERNETCACHE = 0x20,
	ssfLOCALAPPDATA = 0x1c,
	ssfMYPICTURES = 0x27,
	ssfNETHOOD = 0x13,
	ssfNETWORK = 0x12,
	ssfPERSONAL = 0x05,
	ssfPRINTERS = 0x04,
	ssfPRINTHOOD = 0x1b,
	ssfPROFILE = 0x28,
	ssfPROGRAMFILES = 0x26,
	ssfPROGRAMFILESx86 = 0x30,
	ssfPROGRAMS = 0x02,
	ssfRECENT = 0x08,
	ssfSENDTO = 0x09,
	ssfSTARTMENU = 0x0b,
	ssfSTARTUP = 0x07,
	ssfSYSTEM = 0x25,
	ssfSYSTEMx86 = 0x29,
	ssfTEMPLATES = 0x15,
	ssfWINDOWS = 0x24
} ShellSpecialFolderConstants;


関連する記事

JScript : ディレクトリ選択


posted by at 2009-06-21 23:38 | VBScript | このブログの読者になる | 更新情報をチェックする