J'ai un programme avec un FileSystemWatcher qui s'auto-vérifie pour être mis à jour vers une nouvelle version par un programme externe (qui consiste à renommer l'exécutable actuel et à en copier un nouveau à sa place). Le problème est que, lorsque le fichier qu'il regarde est dans le répertoire Program Files, FileVersionInfo.GetVersionInfo() n'obtient pas les informations de la nouvelle version, il retourne la même chose que la première fois. Donc, s'il était mis à jour de 1.1 à 1.2, il dirait "Mis à jour de 1.1 à 1.1" au lieu de "Mis à jour de 1.1 à 1.2". Cela fonctionne correctement dans le répertoire de débogage, mais sous Program Files, il n'obtiendra pas la valeur correcte.Rafraîchir FileVersionInfo dans le répertoire Program Files
est ici l'essence de ce qu'il fait, sans toute la gestion des exceptions et l'élimination et en invoquant l'exploitation forestière et du fil et tels:
string oldVersion;
long oldSize;
DateTime oldLastModified;
FileSystemWatcher fs;
string fullpath;
public void Watch()
{
fullpath = Assembly.GetEntryAssembly().Location;
oldVersion = FileVersionInfo.GetVersionInfo(fullpath).ProductVersion;
var fi = new FileInfo(fullpath);
oldSize = fi.Length;
oldLastModified = fi.LastWriteTime;
fs = new FileSystemWatcher(
Path.GetDirectoryName(fullpath), Path.GetFileName(file));
fs.Changed += FileSystemEventHandler;
fs.Created += FileSystemEventHandler;
fs.EnableRaisingEvents = true;
}
void FileSystemEventHandler(object sender, FileSystemEventArgs e)
{
if (string.Equals(e.FullPath, fullpath, StringComparison.OrdinalIgnoreCase))
{
var fi = new FileInfo(fullpath);
if (fi.Length != oldSize
|| fi.LastWriteTime != oldLastModified)
{
var newversion = FileVersionInfo.GetVersionInfo(fullpath).ProductVersion;
NotifyUser(oldVersion, newversion);
}
}
}
Comment puis-je faire GetVersionInfo() rafraîchir pour voir la nouvelle version? Y a-t-il autre chose que je devrais appeler à la place?