2

現在、アプリケーションの 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

4

1 に答える 1

5

交換

Directory.GetCurrentDirectory() + @"\AppLauncher.exe"

System.Reflection.Assembly.GetEntryAssembly().Location

(もし、あんたが

ただし、自転車を再発明するのではなく、すべての統合機能を既に実装し、すべてのバグを解決済みの利用可能なインストーラ ソリューションの 1 つを使用することをお勧めします。

例: ClickOnceWiX

于 2012-07-03T08:48:24.697 に答える