2017-05-14 10 views
-1

.NETアプリをUSBスティックから実行する必要があるため、.NETがインストールされているかどうかを確認する必要があります。.NETインストールをVBScriptで開始し、完了までお待ちください

あなたが本当にあなたのスクリプトが完了するために、.NET Frameworkのインストーラを待ちたい場合

Option Explicit 
Dim oShell 
Dim value 

On Error resume next 

Set oShell = CreateObject("WScript.Shell") 
value = oShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release") 

' check for .NET Framework 4.5.1 -> 378xxx 

If ((Err.Number <> 0) Or (Clng(value) < 379000)) Then 
    ' .NET 4.5.1 is not istalled....install it (and wait for completition) 
    MsgBox("Install .NET") 
    oShell.Run "NDP451-KB2858728-x86-x64-AllOS-ENU.exe", 1, True 
End If 

oShell.Exec("MyApp.exe") 
+0

インストーラは、 '.Run'メソッドによって追跡されない子プロセスを起動することがあります。プロセスエクスプローラでそれを調べることができます。 NET Frameworkをパッケージに同梱して.NETアプリケーションをポータブルにするだけではどうですか?ポータブルアプリケーション作成ソフトのほとんどは、そのような機能をサポートしています。 – omegastripes

+0

こんにちは@omegastripes、これは私の目標だった。私のパッケージにFramewotkを含めるにはどうすればいいですか?単にアセンブリをコピーしますか? – Barzo

+0

あなたのアプリを移植可能にすることがポイントです。以前のSpoon Studioのような目的のために、IIRCは.NET Framework、Java、Flash、Shockwave、Acrobat Reader、SQL Server 2005 Expressなどのさまざまなランタイム環境を組み込むことができます(https://turbo.net/ docs/building/working-with-turbo-studio)を使用しています。 – omegastripes

答えて

2

どこが間違っている、私は(Win10で)このVBScriptを作成するが、それは最後までインストーラを待ちません。別のオプションは、連続ループのにする必要があります。

は、次のスクリプトを見てみましょう:

Option Explicit 
Dim oShell 
Dim value 
Dim PackageName 

PackageName = "NDP451-KB2858728-x86-x64-AllOS-ENU.exe" 

Function IsProcessRunning(StrProcess) 
    Dim Process 
    IsProcessRunning = False 
    For Each Process in GetObject("winmgmts://.").InstancesOf("Win32_process") 
    If UCase(Process.Name) = UCase(StrProcess) Then 
    IsProcessRunning = True 
    Exit Function 
    End If 
    Next 
End Function 

On Error Resume Next 

Set oShell = CreateObject("WScript.Shell") 
Value = oShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release") 

'Check for .NET Framework 4.5.1 -> 378xxx 
If ((Err.Number <> 0) Or (Clng(Value) < 379000)) Then 
'.NET 4.5.1 is not istalled....install it (and wait for completition) 
    MsgBox("Installing .NET Framework 4.5.1...") 
    oShell.Run """<< ONLY ABSOLUTE PATH TO YOUR PACKAGE FILE + BACKSLASH >>" + PackageName + "", 1, False 
End If 

Do 
    WScript.Sleep 500 
Loop Until IsProcessRunning(PackageName) = False 

MsgBox ".NET Framework 4.5.1 has been installed successfully, Running MyApp..." 
oShell.Exec("MyApp.exe") 

をこのループは0のみ使用 - CPUリソースの3%と確実に完了するか何らかの理由で中断するインストーラを待ちます。

注:このオプションは、インストールが完了または中断されるまで、メインの.NET Frameworkセットアップパッケージがバックグラウンドプロセスとして実行されている場合にのみ機能します。

ここでは、.NET Framework 4.5.1をインストールする際に、このオプションが機能するはずです。

関連する問題