6

ファイルを保持して集計せずに、プログラムが以前に C# で実行された回数を取得するにはどうすればよいですか。その方法が不可能な場合は、スケジュール タスク マネージャーから取得できますか?

C. Ross へ: これはレジストリ設定でどのように行われますか? 私を許して。. . レジストリ設定とは何ですか?

4

9 に答える 9

13

これはレジストリ設定で行います。

static string AppRegyPath = "Software\\Cheeso\\ApplicationName";
static string rvn_Runs = "Runs";

private Microsoft.Win32.RegistryKey _appCuKey;
public Microsoft.Win32.RegistryKey AppCuKey
{
    get
    {
        if (_appCuKey == null)
        {
            _appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(AppRegyPath, true);
            if (_appCuKey == null)
                _appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(AppRegyPath);
        }
        return _appCuKey;
    }
    set { _appCuKey = null; }
}

public int UpdateRunCount()
{
    int x = (Int32)AppCuKey.GetValue(rvn_Runs, 0);
    x++;
    AppCuKey.SetValue(rvn_Runs, x);
    return x;
}

WinForms アプリの場合は、フォームの OnClosing イベントをフックして実行できますUpdateCount

于 2009-08-05T15:04:58.773 に答える
10

私の知る限り、Windows はこの情報を保持していません。どこかで値を集計する必要があります (ファイル、データベース、レジストリ設定)。Windows タスク スケジューラの機能は非常に低くなっています。

于 2009-08-05T15:02:11.773 に答える
7

アプリが実行された回数はレジストリに保存されます。ただし、いくつかの注意事項があります。

  1. ユーザーレジストリ(HKCUなど)に保存されます[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist]
  2. パスは ROT13 に格納されるため、たとえば runme.exe は ehazr.rkr になります。
  3. レジストリは、実際には 3 つの値をバイナリ形式で格納します。最後のランタイム、実行回数 (何らかの理由で 1 ではなく 6 から始まります)、およびアプリケーションの名前です。

これが役立つかどうかはわかりませんが、これで完了です。

于 2011-05-26T06:23:58.533 に答える
4

これはレジストリ処理のチュートリアルです -- C# Registry Basics

于 2009-08-05T15:08:51.077 に答える
1

と呼ばれるアプリケーション設定を簡単に作成できますProperties.Settings.Default.TimesRun;

そのようにそれを使用してください:

private void Form1_Load( object sender, EventArgs e )
{
   Properties.Settings.Default.TimesRun = timesrun++;
   Properties.Settings.Default.Save();
}
于 2009-08-07T18:20:00.583 に答える
0

Windows に含まれている ESENT データベースを使用することをお勧めします。ESENT Managed Interfaceを使用すると、ソフトウェア サポートを簡単に利用できます。

于 2009-08-05T15:13:48.260 に答える
0

@チーソ

そのコードではプライベートメンバー変数は必要ありません。少しスリムにする1つの方法です。

using Microsoft.Win32;
public RegistryKey AppCuKey
{
    get
    {
        return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
            ?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
    }
}

または、プライベート変数を更新したい場合は、メソッドを呼び出さないようにするために (とにかくかなり安価なメソッドです)、if == nullチェックを節約できます。

于 2009-08-05T15:24:06.090 に答える
0

いいえ、タスク マネージャーはそのような情報を提供しません。集計を更新してアプリケーションを実行し、スクリプトを呼び出すタスクを設定するスクリプトを作成するのは難しくありません。

于 2009-08-05T15:03:26.483 に答える