2010-12-14 65 views
0

J'ai un programme qui utilise un outil tiers pour créer un fichier texte de journal.C# Comment naviguer automatiquement vers le répertoire {GUID}?

Cependant, l'outil nécessite le répertoire de points de restauration de Windows XP. Le répertoire qui stocke les points de restauration est le "C: \ System Volume Information_restore {GUID}".

Le dossier _restore {GUID} contiendrait tous les points de restauration. Cependant les {GUID} sont des nombres totalement aléatoires et sont différents pour chaque ordinateur. Le répertoire "C: \ System Volume Information" ne contient généralement que 1 dossier qui est le dossier "_random {GUID}".

Par conséquent, le programme C# peut-il utiliser des codes ou des méthodes pour remplir automatiquement les arguments de commande de l'outil?

Quelqu'un peut-il vous conseiller sur les codes? Merci!

Les codes:

 Process process = new Process(); 
     process.StartInfo.FileName = @"C:\test\ftk\ripxp\ripxp.exe"; 
     // How to automatically navigate to the {GUID} folder? 
     process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\_restore{GUID} -p runmru"; 
     process.StartInfo.CreateNoWindow = false; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 
     process.StartInfo.RedirectStandardInput = true; 
     process.StartInfo.RedirectStandardError = true; 
     process.Start(); 

L'outil 3ème partie (2008 H. Carvey) Arguments:

C:\>ripxp -r d:\cases\ntuser.dat -d d:\cases\svi -p userassist 

Répondre

0

Pourquoi ne pas interroger cet emplacement du dossier et boucle dans la liste des répertoires pour trouver le dossier qui commence par "_restore", puis branchez cela dans votre argument?

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\System Volume Information\"); 
DirectoryInfo restoreFolder = directoryInfo.GetDirectories().FirstOrDefault(d => 
    d.Name.StartsWith("_restore")); 

if (restoreFolder == null) 
    throw new DirectoryNotFoundException(); 

Ensuite, vous devriez être en mesure de brancher cette valeur de dossier dans votre argumentation

process.StartInfo.Arguments = string.Format(
    @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\{0} -p runmru", 
    restoreFolder.Name); 
+0

Merci pour la réponse mate bien que les arguments ne fonctionnent pas maintenant .... – JavaNoob

1

Ce code montre comment obtenir le plus récemment créé répertoire _restore:

static void Main(string[] args) 
    { 
     DirectoryInfo di = new DirectoryInfo(@"c:\System Volume Information"); 
     DirectoryInfo directoryInfo = null; 
     foreach (var enumerateDirectories in di.GetDirectories("_restore*")) 
     { 
      if (directoryInfo == null || enumerateDirectories.CreationTime > directoryInfo.CreationTime) 
      { 
       directoryInfo = enumerateDirectories; 
      } 
     } 
     if (directoryInfo != null) 
     { 
      Console.WriteLine(directoryInfo.FullName); 
     } 
     Console.ReadLine(); 
    } 
+0

Reps up pour d'autres méthodes! – JavaNoob