Windows

インストールしたユーザーのみ実行できるようにする

やりたいこと

プログラムをインストールしたユーザーだけが、そのプログラムを実行できるようにしたい。

環境

  • OS:Windows 7/10
  • セットアップ作成ツール:Inno Setup

方法

  1. インストーラーでLocal Application Dataにインストールしたことを示すファイルを保存する。

    // iss
    Source: ".\installed"; DestDir: "{localappdata}\company\app"; Flags: ignoreversion;

  2. プログラムの起動時に、そのファイルがあるかどうかをチェックして、ファイルがなければ、起動できないメッセージを表示して終了する。

// c#
string folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string installedFile = Path.Combine(folder, "company", "app", "installed");
if (File.Exists(installedFile) == false)
{
    MessageBox.Show("You can't execute this program.");
}

メモ

  • 管理者権限を持たないユーザーの場合、管理者ユーザーに移行してインストールするので、インストーラーを実行したユーザーでも起動はできない。

  • inno setupでインストールしたユーザーのデスクトップのみにアイコンを作成する

Name: "{userdesktop}\app"; Filename: "{app}\app.exe"; WorkingDir: "{app}";
  • inno setupでインストールしたユーザーのスタートメニューのみにアイコンを追加する(本当はフォルダーを追加したかったが分からなかった。)
Name: "{userprograms}\app"; Filename: "{app}\app.exe"; WorkingDir: "{app}"; 
  • Windows Installerのインストール対象を「このユーザーのみ」に設定しても、エクスプローラなどで直にexeファイルを起動すれば実行できる。このオプションはデスクトップとスタートメニューにショートカットを追加しないだけのフラグみたい。

  • レジストリを使う方がスマートだったかもしれない。