2009-01-14 6 views

Répondre

16

En fait, vous pouvez utiliser NGEN et clickone, mais vous devrez exécuter NGEN après l'installation de clickonce, puisque NGEN fait partie de l'installation .NET (pour 3.5 vous devriez vous référer à l'installation 2.0).

Voici un exemple, je pense qu'il est suffisamment générique pour que vous puissiez l'utiliser sans changer ou de faire très peu de changements au code (à l'exception de l'appel à votre formulaire):

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     if (ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.IsFirstRun) 
     { 

      string appPath = Application.StartupPath; 
      string winPath = Environment.GetEnvironmentVariable("WINDIR"); 

      Process proc = new Process(); 
      System.IO.Directory.SetCurrentDirectory(appPath); 

      proc.EnableRaisingEvents = false; 
      proc.StartInfo.CreateNoWindow = false; 
      proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

      proc.StartInfo.FileName = winPath + @"\Microsoft.NET\Framework\v2.0.50727\ngen.exe"; 
      proc.StartInfo.Arguments = "uninstall " + Application.ProductName + " /nologo /silent"; 

      proc.Start(); 
      proc.WaitForExit(); 

      proc.StartInfo.FileName = winPath + @"\Microsoft.NET\Framework\v2.0.50727\ngen.exe"; 
      proc.StartInfo.Arguments = "install " + Application.ProductName + " /nologo /silent"; 

      proc.Start(); 
      proc.WaitForExit(); 

     } 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
} 
+4

Cela ne fonctionne pas sur Windows 7 (et je suppose que Vista), car 'ngen' veut fonctionner en tant qu'administrateur. –

+2

Ce n'est pas très pratique car il nécessite des permissions d'administrateur. La nature de clickonce est qu'il ne nécessite pas d'autorisations d'administration à installer, donc l'ajout de ce code n'aurait pas de sens. – pmcilreavy

Questions connexes