プログラムは何回実行されましたか? C#
-
22-07-2019 - |
質問
ファイルを保持して集計せずにプログラムが以前にC#で実行された回数を取得するにはどうすればよいですか。そのようにできない場合は、スケジュールされたタスクマネージャーから取得できますか?
C。ロスへ:レジストリ設定でこれはどのように行われますか?私を許して。 。 。レジストリ設定とは何ですか?
解決
私の知る限り、Windowsはこの情報を保持しません。どこかで値を集計する必要があります(ファイル、データベース、レジストリ設定)。 Windowsタスクスケジューラの機能は非常に低くなっています。
他のヒント
これはレジストリ設定で行います。
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
を実行できます。
アプリの実行回数はレジストリに保存されます。ただし、いくつかの注意事項があります。
- user レジストリ(HKCUなど)に格納されています
[HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ UserAssist]
- パスは ROT13 に格納されているため、たとえばrunme.exeはehazr.rkr <になります
- レジストリは、実際には3つの値をバイナリ形式で保存します。最後のランタイム、実行カウント(何らかの理由で1ではなく6から始まります)、およびアプリケーションの名前です。
これが役立つかどうかわからないが、そこにある!
レジストリ処理のチュートリアル- C#レジストリの基本
単にアプリケーション設定 Properties.Settings.Default.TimesRunと呼ばれる;
次のように使用します:
private void Form1_Load( object sender, EventArgs e )
{
Properties.Settings.Default.TimesRun = timesrun++;
Properties.Settings.Default.Save();
}
いいえ、タスクマネージャーはそのような情報を提供しません。集計を更新してからアプリケーションを実行し、スクリプトを呼び出すタスクを設定するスクリプトを作成するのは難しくありません。
Windowsに含まれているESENTデータベースの使用をお勧めします。ソフトウェアサポートは、 ESENT管理インターフェイスで簡単に利用できます。
@ チーソー、
そのコードでプライベートメンバー変数を必要としない、少しスリムにするための1つの方法:
using Microsoft.Win32;
public RegistryKey AppCuKey
{
get
{
return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
}
}
または、プライベート変数を更新したい場合、メソッド(とにかくかなり安価なメソッド)を呼び出さないようにするために、 if == null を保存できます確認してください。
int x = Your_Project.Properties.Settings.Default.Counter;
x++;
Your_Project.Properties.Settings.Default.Counter = x;
Your_Project.Properties.Settings.Default.Save();