現在、アプリケーションの Autoupdater に取り組んでいます。(インストーラー、アップデーター、削除ツールとの組み合わせ)
すべてのものを自動的にセットアップしたい:
- スタート メニュー エントリ
- C:\Program Files\ 内のフォルダー
- App Data 内の Config フォルダー (ローミング / ローカルに依存)
- 「プログラムと機能」のソフトウェアの削除 - エントリ
- デスクトップのショートカット。
これはすべて非常にうまく機能します。Program Files とレジストリに書き込むには、ツールに管理者権限が必要です。そのため、目的のソフトウェアが選択された後、AppLauncher の「再起動」を追加しました。このようなもの:
ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe");
pi.Verb = "runas";
pi.Arguments = "install " + this.appItem.APID;
Process p = new Process();
p.StartInfo = pi;
try
{
p.Start();
Application application = Application.Current;
application.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error",
application.Shutdown();
}
また、ユーザーが AppLauncher.exe をフォルダーのどこかに保存し、それをダブルクリックして起動すると、この手順は非常にうまく機能します。
ユーザーがブラウザから「実行」を押すことにした場合、インストーラーは、「AppLauncher.exe」が見つからないことを示す、表示された例外に遭遇します。ブラウザから直接ファイルを開始すると、別の WorkingDirectory がセットアップされるため、
Directory.GetCurrentDirectory()
ファイルが配置されている適切な値を返しません。ユーザーがファイルに別の名前を付けることにした場合も、機能しない可能性があります。
それで、私はこれで何ができますか?
File.GetCurrentFile() のようなものはありますか:P