web-dev-qa-db-ja.com

MSIをインストールするバッチスクリプト

。batを初めて記述しようとしています。

スクリプトを使用して.msiをインストールしようとしていますが、現在、それをダブルクリックして手動でインストールしています。

からのパスd:/installed sw/$folder/.msi

へのパス:D:/program files/app/

$folderは、現在の日付までに作成されたフォルダーで提供される新しいmsiをインストールするため、毎回異なることを意味します。

私が試しているスクリプトは次のとおりです。

@echo off
Title Host: Installing Updates on %computername%
echo %computername%
set server=\\SERVERNAME or PATH\msifolder
:select
cls
echo Select one of the Following MSI Install Folders for installation task.
echo.
dir %server% /A:D /B
SET /P MSI=Please enter the MSI Folder to install: 
SET source=%server%\%MSI%
echo Selected Installation %MSI%
echo.
echo.

:verify
ECHO Is This Correct?
echo.
echo.
ECHO 0: ABORT INSTALL
ECHO 1: YES
ECHO 2: NO,RE-SELECT
SET /p choice=Select YES, NO or ABORT? [0,1,2]:
     if /i [%choice%]==[0] endlocal&goto end
     if [%choice%]==[] goto BCurrentlocal
     if [%choice%]==[1] goto yes
 if [%choice%]==[2] goto no
 endlocal

:no
goto select
:yes
set FILENAME=%MSI%
call %source%\%FILENAME%.msi
echo beginning %MSI% installation
pause
echo Exiting Install Script....
PING -n 4 127.0.0.1 >nul
exit

に沿って set serverパスをに追加しています。

SET /P MSIは、fromからのパスです。

ただし、機能していません。

誰が私がやっている間違いを私に導くことができますか?

8
Aman

通常のMSIファイルをサイレントインストールする

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"

簡単な説明:

 /L*V "C:\Temp\msilog.log"= verbose logging
 /QN = run completely silently
 /i = run install sequence 

msiexec.exeコマンドライン は、さまざまなオプションをサポートする拡張機能です。同じコマンドラインインターフェイスの 別の概要 です。これは 注釈付きバージョン (壊れていた、ウェイバックマシンを介して復活)です。

バッチファイルを大幅に短くするfor loops などのコンストラクトを使用して、Windows Updateでここに示すようにすることもできます。

セットアップ時にチェックする必要があるチェックボックスがある場合は、チェックボックスに適切なPUBLIC PROPERTIESを付けて設定する必要があります。次のようなコマンドライン:

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" STARTAPP=1 SHOWHELP=Yes

これらのプロパティは、MSIごとに異なります。これらはverbose log fileを介して、または Orcaまたは別の適切なツール でMSIを開くことで見つけることができます。プロパティ名は、ダイアログコントロールセクションまたはプロパティテーブルで確認する必要があります。セットアップを実行し、最初に詳細なログファイルを作成してから、「プロパティを設定しています...」というメッセージをログで検索してから、プロパティ名を確認します。次に、このプロパティにログファイルの値をコマンドラインに追加します。

また、トランスフォームを使用して、コマンドラインパラメーターの設定を超えてMSIをカスタマイズする方法もご覧ください。 MSIファイルをより有効に使用する方法

17
Stein Åsmul

トピックから外れているように見えるかもしれませんが、ERRORLEVELを確認する手間はありません。あなたの提案を使用したとき、MSIのインストール直後にエラーをチェックしようとしました。意図的に失敗させ、バッチファイルではmsiexecがエラーを設定していないように見えますが、コマンドラインではすべてがうまく機能することに気付きました。そこに別のものを試してみました

  • Start/waitを使用する
  • !ERRORLEVEL!を使用する%ERRORLEVEL%の代わりに変数
  • SetLocal EnableDelayedExpansionの使用

何も機能せず、主に私を悩ますのは、コマンドラインで機能することです。

0
Giuseppe

バッチファイルは次のとおりです。

@echo off
Title Host: Installing updates on %computername%
echo %computername%
set Server=\\SERVERNAME or PATH\msifolder

:select
cls
echo Select one of the following MSI install folders for installation task.
echo.
dir "%Server%" /AD /ON /B
echo.
set /P "MSI=Please enter the MSI folder to install: "
set "Package=%Server%\%MSI%\%MSI%.msi"

if not exist "%Package%" (
   echo.
   echo The entered folder/MSI file does not exist ^(typing mistake^).
   echo.
   setlocal EnableDelayedExpansion
   set /P "Retry=Try again [Y/N]: "
   if /I "!Retry!"=="Y" endlocal & goto select
   endlocal
   goto :EOF
)

echo.
echo Selected installation: %MSI%
echo.
echo.

:verify
echo Is This Correct?
echo.
echo.
echo    0: ABORT INSTALL
echo    1: YES
echo    2: NO, RE-SELECT
echo.
set /p "choice=Select YES, NO or ABORT? [0,1,2]: "
if [%choice%]==[0] goto :EOF
if [%choice%]==[1] goto yes
goto select

:yes
echo.
echo Running %MSI% installation ...
start "Install MSI" /wait "%SystemRoot%\system32\msiexec.exe" /i /quiet "%Package%"

コマンドプロンプトウィンドウにhelp cmdまたはcmd /?のいずれかを入力すると、最終ページ出力にリストされる文字は、バッチファイルで特別な意味を持ちます。これらの文字を文字どおりに解釈する必要がある文字列でも、括弧と角括弧が使用されています。したがって、上記のコードに見られるように、文字列を二重引用符で囲むか、文字^でこれらの文字をエスケープする必要があります。そうしないと、構文エラーによりコマンドラインインタープリターがバッチ実行を終了します。

また、拡張子がMSIのファイルを呼び出すことはできません。 * .msiファイルは実行可能ファイルではありません。 MSIファイルをダブルクリックすると、Windowsはレジストリ内で、どのアプリケーションがこのファイル拡張子に関連付けられてアクションを開くかを調べます。そして、使用するアプリケーションは、MSIパッケージ内にアプリケーションをインストールするためのmsiexecとコマンドラインオプション/iです。

msiexec.exe /?を実行して、GUIウィンドウで使用可能なオプションを取得するか、 Msiexec(コマンドラインオプション) を確認します。

サイレントインストールの必須オプション/quietに既に/iを追加しました。

上記のバッチコードでは、コマンドstartをオプション/waitとともに使用して、Windowsアプリケーションmsiexec.exeを起動し、インストールが完了する(または中止される)までバッチファイルの実行を保留します。

0
Mofi