2

Javaから呼び出してファイルを解凍し、解凍されたファイルを使用するvbscriptを作成しようとしています。昇格モードで解凍を実行する必要があります。私がそうするとき、vbscriptはファイルが解凍されるのを待たずに戻り、次のコマンドはファイルがそこにある前に実行されます。

これが私が現在していることです:

Java:

public void unzipElevated( String fileName, String Target )
{
   String  unzipFile = "cscript " 
          + tmpDir.getAbsoluteFile() + File.separator + "RunElevated.vbs "
          + "UnzipFiles.vbs "    
          + fileName + " "
          + Target   + File.separator;
   ArrayList<String> lines = new ArrayList<String>();

   Process p;
   try
   {
      p = Runtime.getRuntime().exec( unzipFile );
      p.waitFor();

      InputStream s = p.getInputStream();
      Scanner     i = new Scanner( s );
      while (i.hasNextLine())
         lines.add( i.nextLine() );
   }
   catch (Exception e)
   {
   }
}

vbscript:(RunElevated.vbs)

' Run the script in elevated mode
'
' This will be needed to install programs into Program Files
prgName      = Wscript.Arguments.Item(0)
prgArgs      = ""
If Wscript.Arguments.Count > 1 Then
   For i = 1 To Wscript.Arguments.Count - 1
      prgArgs = prgArgs & " " & Wscript.Arguments.Item(i)
   Next
End If
Set objShell = CreateObject("Shell.Application")
Set fso      = CreateObject("Scripting.FileSystemObject")
strPath      = fso.GetParentFolderName (WScript.ScriptFullName)
If fso.FileExists(strPath & "\" & prgName) Then
   prgCmd = Chr(34) & strPath & "\" & prgName & Chr(34)
   If prgArgs <> "" Then
      prgCmd = prgCmd & " " & prgArgs
   End If 
   objShell.ShellExecute "wscript.exe", prgCmd, "", "runas", 1
Else
   Wscript.Echo "Script file not found"
End If 

vbscript:(UnzipFiles.vbs)

' unzip a file- for now assume that full paths will be provided
ZipFile  = Wscript.Arguments.Item(0)
Extract  = Wscript.Arguments.Item(1)
Set fso  = CreateObject("Scripting.FileSystemObject") 
If fso.FileExists( ZipFile ) Then
' If the extraction location does not exist create it.
   If NOT fso.FolderExists( Extract ) Then 
      fso.CreateFolder( Extract ) 
   End If 

' Do the extraction  
   set objShell   = CreateObject( "Shell.Application" ) 
   set FilesInZip = objShell.NameSpace( ZipFile ).items 
   objShell.NameSpace( Extract ).CopyHere  FilesInZip, 16 

   Set objShell = Nothing 
Else
   Wscript.echo "Zip file not found"
End If

Set fso      = Nothing 

RunElevatedでwscriptを使用しているのは、uzipコマンドから進行状況ボックスを表示したいが、cmdウィンドウは表示したくないためです。CopyHereで16を使用して、ファイルの上書きについてプロンプトを表示しません。

zipが開始されるとすぐに戻ることを除いて、うまく機能します。これにより、解凍されたファイルを使用しようとするのが面倒になります。

Runコマンドを見つけました。プロセスが終了するのを待つオプションがあります。

Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs" intWindowStyle, bWaitOnReturn

これにより、(bWaitOnReturnをtrueに設定して)呼び出されたものが終了するまでvbscriptを待機させることができると思いますが、Runを使用して昇格モードで実行する方法がわかりません。

私は探していましたが、昇格して実行し、プロセスが終了するのを待つ方法が見つかりませんでした。これはかなり一般的な要件のようです(コピー、解凍などの場合)。私はvbscriptの初心者です。答えが見つからなかったか、調べても認識できませんでした。

vbscriptの第一人者がここで私を助けてくれますか?または、Javaが間違っている場合は、そこでもサポートを提供できれば幸いです。

4

0 に答える 0