読者です 読者をやめる 読者になる 読者になる

ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

Windowsのデスクトップアプリのインストーラーがすること、アンインストーラーがすること

ちょっと気になって調べていたのでめもです。まあやってることはほぼ正反対なんですけどね、この子ら。

インストーラーのすること

  1. アプリケーションを動かすために必要な依存性の解決
    1. OSが対応してなかったりして完全に解決できなければメッセージを出してバイバイする
    2. 必要なら足りないコンポーネントやライブラリのインストーラーを起動する
  2. アプリケーションの配置
    1. 所定の場所に実行ファイルや画像などを置く
    2. 権限が必要なら昇格を要請する
  3. 必要であればアプリケーション情報をレジストリに登録する
    1. 依存するコンポーネントを適切に動かすためのフラグ。ブラウザーコンポーネントとかブラウザーコンポーネントとかブラウザーコンポーネントとかね
    2. 「プログラムの追加と削除」に表示する情報

アンインストーラーのすること

  1. 登録したレジストリの削除
    1. 「プログラムの追加と削除」に表示する情報は登録したら必ず削除する
    2. 立てたフラグはちゃんと回収しましょう
  2. 配置したアプリケーションの削除
  3. 自分自身も削除して撤収完了

ざっとこんな感じです。いちばんめんどくさそうなのがいちばん最初のやつです。これはほんとインストーラー作成ツールとかにでも任せたほうがいい気がします。あとはひたすら作業ゲーです。

UACの昇格要求を出す

アプリケーションを起動するときに、「runas」というオプションをつけるか、マニフェストにある「requestedExecutionLevelのlevelを「asInvoker」から「requireAdministrator」に変更」すると昇格要求を出せます。
UACが有効の時、必要な処理だけ管理者に昇格させて実行する: .NET Tips: C#, VB.NET
UACが有効の時、アプリケーションを管理者に昇格させて起動する: .NET Tips: C#, VB.NET

「プログラムの追加と削除」にアプリケーションを登録する

「\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall」以下に一意なキーを登録します。ここにレジストリを登録するには管理者権限が必要なので、登録するときはUACの昇格要求を出しましょう。
最低限登録する値は次の2つで、どちらも文字列です。

DisplayName
一覧で表示される名前
UninstallString
アンインストーラーの起動コマンド

自殺アプリケーションの作り方

自分を削除できるまでループするバッチを吐き出して優先度を低くして実行するコードを用意して、処理が済んだら呼び出してやります。バッチファイルは簡単に自殺できるのですねさすが。
Cで書いたものは下で見ることができます。
自殺プログラム