Pages

自己紹介

某IT技術情報誌に連載記事を持っていたテクニカルライター。またもや休刊してしまったよ。
Copyright © 2011-2016 Daregada. All rights reserved. Powered by Blogger.

gdippインストール時にサービスを開始できない問題

2011-02-11

Windows Vista/7でUACが有効な場合、gdippのインストールパッケージをダブルクリックしてインストールしたのでは、インストーラーがgdippサービスを起動できないよ、という話。

Abstract

gdipp関連のスレッドを見ていると、
  • インストール終了時に「サービスを即時開始する」をチェックしたのに、gdippサービスが開始されない
  • インストールしたのに、gdippによるアンチエイリアスがかからない
といった書き込みが散見されるので、想定される理由と対応策を述べる。
理由
一般ユーザー権限で起動されたインストーラーはサービスを開始できないため
対策
以下の方法のひとつを行なう

想定される理由

gdippのインストールパッケージ(gdipp_x86_0.9.1.msiなど)をダブルクリック(あるいは右クリックから[インストール]を選択)すると、関連付けに基ついてWindows Installer (msiexec.exe)のプロセスが起動する。

Windows Vista/7の初期設定ではUACが有効なので、管理者権限を持つユーザーであっても、通常の操作では一般ユーザー権限しか持たない。 ダブルクリックで起動したmsiexec.exeのプロセスも、一般ユーザー権限で実行される。 しかし、%ProgramFiles%のような保護されたフォルダへのファイルのコピーには管理者権限が必要だ。

そこで、Windows Installerは、インストールの途中でUACの昇格ダイアログを開く。 ここで、ユーザーが昇格を承認すると、管理者権限に昇格されたmsiexec.exeが別プロセスで起動され、ファイルのコピーはそちらが担当する。 ファイルのコピーが終了すると、昇格されたプロセスは即座に終了する。

さて、インストールの最後に、"Start service immediately"(サービスを即座に開始する)がチェックされている(既定値)と、インストールが終了する前に、Windows Installerはgdippサービスを開始しようとする。 しかし、このときのmsiexec.exeのプロセスは一般ユーザー権限なので、管理者権限が必要な「サービスの開始」を行なえない。

とりうる対策

対策としては、「管理者権限に昇格させたmsiexec.exeを最初に起動する」か、「インストール後に手動でサービスを開始する」、「インストール後にWindowsを再起動する」のいずれかだ。

  • 最初から管理者権限に昇格させたmsiexec.exeを使う方法
    1. スタートボタンを押して"cmd"とキー入力
    2. 見つかった"cmd.exe"を右クリックし、「管理者として実行」を選択。 UACの昇格ダイアログで[はい]ボタン(Vistaでは[続行]ボタン)を押すと、 管理者権限でコマンドプロンプトが開く
    3. このコマンドプロンプトで、インストールを指示する/iオプションと、 入手したgdippパッケージのフルパスを指定してmsiexec.exeを実行する。 msiexec /i C:\Users\ユーザー名\Downloads\gdipp_x86_0.9.1.msi

      ※gdippパッケージの保存先は各人のPC環境により異なるので、 このまま入力してもダメ

    4. gdippのインストーラーの指示に従ってインストールを進める。 コマンドプロンプトは閉じてしまって構わない。 "Start service immediately"をチェックしたまま[Finish]ボタンを押すと、 インストーラーによってgdippサービスが開始される。 実行中のアプリも、再描画された部分はアンチエイリアス処理されるので確認しよう
  • インストール後に手動でgdippサービスを開始する方法
    1. 通常の方法でgdippのインストールを行なう。 ただし、最後の画面の"Start service immediately"のチェックは外す

      ※もちろん、チェックを外さなかったとしても、 前述の理由によりサービスは開始されない

    2. インストールが終わったら、スタートボタンを押して"サービス"とキー入力
    3. 見つかった"サービス"をクリック。 VistaではUACの昇格ダイアログで[続行]ボタンを押す
    4. サービス一覧の中から、gdippサービスを示す名称、 "gdipp Service(32-bit)"(32ビット版の場合)や "gdipp Service(64-bit)"(64ビット版の場合)を見つける
    5. これらのgdippサービスの状態欄は空欄のはず(つまり、サービスは現在動いていない)。 "gdipp Service(32-bit)"などを右クリックし、 "開始"を選択すると、gdippサービスが開始される。 実行中のアプリも、再描画された部分はアンチエイリアス処理されるので確認しよう
  • インストール後にWindowsを再起動する方法
    1. 通常の方法でgdippのインストールを行なう。 ただし、最後の画面の"Start service immediately"のチェックは外す

      ※もちろん、チェックを外さなかったとしても、 前述の理由によりサービスは開始されない

    2. インストールが終わったら、Windowsを再起動する
    3. Windows起動時に、gdippサービスが自動的に開始される。 適当なアプリでアンチエイリアス処理されていることを確認しよう

0 件のコメント:

コメントを投稿