やりたいこと
プログラムをインストールしたユーザーだけが、そのプログラムを実行できるようにしたい。
環境
- OS:Windows 7/10
- セットアップ作成ツール:Inno Setup
方法
- インストーラーでLocal Application Dataにインストールしたことを示すファイルを保存する。
// iss
Source: ".\installed"; DestDir: "{localappdata}\company\app"; Flags: ignoreversion;
- プログラムの起動時に、そのファイルがあるかどうかをチェックして、ファイルがなければ、起動できないメッセージを表示して終了する。
// 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ファイルを起動すれば実行できる。このオプションはデスクトップとスタートメニューにショートカットを追加しないだけのフラグみたい。
-
レジストリを使う方がスマートだったかもしれない。