是否可以在部署ClickOnce时使用NGen?

Bra*_*nko 20 clickonce ngen

是否可以在部署ClickOnce时使用NGen?

小智 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于Windows 7(我猜Vista),因为`ngen`想以管理员身份运行. (5认同)
  • 这不是很实用,因为它需要管理员权限.clickonce的本质是它不需要管理员权限来安装,因此添加此代码是没有意义的. (3认同)