Используйте realpath () .
Эти
realpath()
функция должна произойти от пути, на который указываютfile_name
, абсолютный путь, который называет тот же файл, разрешение которого не включает'.
', '..
', или символьные ссылки. Сгенерированный путь должен быть сохранен как завершенная пустым указателем строка, максимум до{PATH_MAX}
байты, в буфере, на который указываютresolved_name
., Если
resolved_name
нулевой указатель, поведениеrealpath()
определяется реализацией.
следующий пример генерирует абсолютный путь для файла, определенного symlinkpath аргументом. Сгенерированный путь хранится в массиве actualpath.
#include
...
char *symlinkpath = "/tmp/symlink/file";
char actualpath [PATH_MAX+1];
char *ptr;
ptr = realpath(symlinkpath, actualpath);
Насколько мне известно, Windows не хранит эту информацию для вас. Вам нужно будет где-то подсчитать значение (файл, база данных, параметр реестра). Планировщик задач Windows имеет очень низкую функциональность.
@ Cheeso ,
Вам не нужна частная переменная-член с этим кодом, один из способов немного уменьшить ее:
using Microsoft.Win32;
public RegistryKey AppCuKey
{
get
{
return Registry.CurrentUser.OpenSubKey(AppRegyPath, true)
?? Registry.CurrentUser.CreateSubKey(AppRegyPath);
}
}
Или, если вы хотите обновить частную переменную, чтобы не вызывать метод (в любом случае, это довольно дешевый метод), вы все равно можете сэкономить проверку if == null .
Я делаю это в настройках реестра.
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
.
Вот руководство по работе с реестром - Основы реестра C #
Вы можете просто создать параметр приложения с именем Properties.Settings.Default.TimesRun;
Используйте его так:
private void Form1_Load( object sender, EventArgs e )
{
Properties.Settings.Default.TimesRun = timesrun++;
Properties.Settings.Default.Save();
}
Нет, диспетчер задач не предоставляет такую информацию. Мне было бы несложно создать сценарий, который обновлял бы счетчик, а затем запускал приложение, а затем настраивал задачу для вызова сценария.
Я рекомендую использовать базу данных ESENT, которая включена в Windows. Поддержка программного обеспечения легко доступна с помощью управляемого интерфейса ESENT .