ファイルを保持して集計せずに、プログラムが以前に C# で実行された回数を取得するにはどうすればよいですか。その方法が不可能な場合は、スケジュール タスク マネージャーから取得できますか?
C. Ross へ: これはレジストリ設定でどのように行われますか? 私を許して。. . レジストリ設定とは何ですか?
ファイルを保持して集計せずに、プログラムが以前に C# で実行された回数を取得するにはどうすればよいですか。その方法が不可能な場合は、スケジュール タスク マネージャーから取得できますか?
C. Ross へ: これはレジストリ設定でどのように行われますか? 私を許して。. . レジストリ設定とは何ですか?
これはレジストリ設定で行います。
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
。
私の知る限り、Windows はこの情報を保持していません。どこかで値を集計する必要があります (ファイル、データベース、レジストリ設定)。Windows タスク スケジューラの機能は非常に低くなっています。
アプリが実行された回数はレジストリに保存されます。ただし、いくつかの注意事項があります。
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist]
これが役立つかどうかはわかりませんが、これで完了です。
これはレジストリ処理のチュートリアルです -- C# Registry Basics
と呼ばれるアプリケーション設定を簡単に作成できますProperties.Settings.Default.TimesRun;
そのようにそれを使用してください:
private void Form1_Load( object sender, EventArgs e )
{
Properties.Settings.Default.TimesRun = timesrun++;
Properties.Settings.Default.Save();
}
Windows に含まれている ESENT データベースを使用することをお勧めします。ESENT Managed Interfaceを使用すると、ソフトウェア サポートを簡単に利用できます。
@チーソ、
そのコードではプライベートメンバー変数は必要ありません。少しスリムにする1つの方法です。
using Microsoft.Win32;
public RegistryKey AppCuKey
{
get
{
return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
}
}
または、プライベート変数を更新したい場合は、メソッドを呼び出さないようにするために (とにかくかなり安価なメソッドです)、if == nullチェックを節約できます。
いいえ、タスク マネージャーはそのような情報を提供しません。集計を更新してアプリケーションを実行し、スクリプトを呼び出すタスクを設定するスクリプトを作成するのは難しくありません。