2009-01-14 91 views

回答

16

實際上你可以使用NGEN和clickone,但是在clickonce安裝發生後你需要運行NGEN,因爲NGEN是.NET安裝的一部分(對於3.5你應該參考2.0安裝)。

下面是一個例子,我認爲這是通用的,你使用它在不改變或做很少的修改代碼(除調用您的形式):

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

這不起作用在Windows 7上(我猜Vista),因爲`ngen`想以管理員身份運行。 – 2012-04-11 01:37:46