Если необходимо диагностировать утечку памяти в.NET, проверьте эти ссылки:
http://msdn.microsoft.com/en-us/magazine/cc163833.aspx
http://msdn.microsoft.com/en-us/magazine/cc164138.aspx
Те статьи описывают, как создать дамп памяти Вашего процесса и как проанализировать его так, чтобы можно было сначала определить, является ли утечка неуправляемой или управляемой, и если им управляют, как выяснить, куда он прибывает из.
Microsoft также имеет более новый инструмент, чтобы помочь с генерацией дампов катастрофического отказа, заменить ADPlus, названный DebugDiag.
string dateInString = "01.10.2009";
DateTime startDate = DateTime.Parse(dateInString);
DateTime expiryDate = startDate.AddDays(30);
if (DateTime.Now > expiryDate) {
//... trial expired
}
DateTime.AddDays
делает это:
DateTime expires = yourDate.AddDays(30);
На один я могу ответить уверенно!
DateTime expiryDate = DateTime.Now.AddDays(30);
Или, возможно - если вам просто нужна дата без привязки времени, что может быть более подходящим:
DateTime expiryDate = DateTime.Today.AddDays(30);
DateTime _expiryDate = DateTime.Now + TimeSpan.FromDays(30);
Возможное решение - при первом запуске создать файл, содержащий текущую дату, и поместить его в IsolatedStorage. Для последующих запусков проверьте содержимое файла и сравните с текущей датой; если разница дат превышает 30 дней, сообщите об этом пользователю и закройте приложение.
Для этого вам необходимо сохранить первое время выполнения программы. Как я, вероятно, это сделаю, используя встроенные настройки приложения в Visual Studio. Сделайте один с именем InstallDate, который является настройкой пользователя и по умолчанию имеет значение DateTime.MinValue или что-то в этом роде (например, 01.01.1900).
Затем, когда программа запускается, проверка выполняется просто:
if (appmode == "trial")
{
// If the FirstRunDate is MinValue, it's the first run, so set this value up
if (Properties.Settings.Default.FirstRunDate == DateTime.MinValue)
{
Properties.Settings.Default.FirstRunDate = DateTime.Now;
Properties.Settings.Default.Save();
}
// Now check whether 30 days have passed since the first run date
if (Properties.Settings.Default.FirstRunDate.AddMonths(1) < DateTime.Now)
{
// Do whatever you want to do on expiry (exception message/shut down/etc.)
}
}
Пользовательские настройки сохраняются в довольно странное место (что-то вроде C: \ Documents and Settings \ YourName \ Local Settings \ Application Data), так что обычному Джо все равно будет довольно сложно его найти. Если вы хотите быть параноиком, просто зашифруйте дату, прежде чем сохранять ее в настройках.
РЕДАКТИРОВАТЬ: Вздох, неправильно прочитал вопрос, не такой сложный, как я думал>.>
@ Эд Кортни, @ Джеймс, У меня один глупый вопрос. Как уберечь пользователя от этого файла? (Файл, содержащий дату истечения срока действия). Если у пользователя есть права на установку, то, очевидно, он также имеет доступ для просмотра файлов. Изменение расширения файла не поможет. Итак, как сохранить этот файл в безопасности и подальше от рук пользователей?
Лучшим решением может быть введение файла лицензии со счетчиком. Запишите в файл лицензии дату установки программы (во время установки). Затем каждый раз, когда приложение запускается, вы можете редактировать файл лицензии и увеличивать счетчик на 1. Каждый раз, когда приложение запускается, вы просто выполняете быструю проверку, чтобы увидеть, были ли достигнуты 30 использований приложения, т.е.
if (LicenseFile.Counter == 30)
// go into expired mode
Также это будет решить проблему, если пользователь вернул системные часы, так как вы можете выполнить простую проверку, чтобы сказать
if (LicenseFile.InstallationDate < SystemDate)
// go into expired mode (as punishment for trying to trick the app!)
Проблема с вашей текущей настройкой заключается в том, что пользователю придется использовать приложение каждый день в течение 30 дней, чтобы получить полные 30 дней испытание.