默认将.nsi文件作为参数传递给cmd,执行它并创建.exe

时间:2016-11-21 13:08:25

标签: c# .net nsis

我正在开发NSIS安装程序(Windows窗体应用程序)。

应用程序的主要思想 - 用户通过一个Windows窗体应用程序,配置所有需要的设置,当他/她点击"完成" .nsis文件自动生成。 makeNSIS.exe在我的应用程序中也包含,因此用户无需安装它即可使用我的安装程序。

我的目标是默默生成setup.exe文件。我想将自动生成的.nsi文件作为参数传递给每cmd的makeNSIS.exe,告诉它执行它并在某个路径上创建setup.exe文件。而我希望整个事情默默地完成。

我失败的一次试验:

        ProcessStartInfo psi = new ProcessStartInfo();
        //my automatically generated nsis file
        psi.Arguments = Application.StartupPath + "\\NSIS\\NSIS SG Project\\NSIS\\My application.nsi";
        psi.CreateNoWindow = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        //nsis application that is included in my project so that users wouldn't have to install it
        psi.FileName = Application.StartupPath + "\\NSIS\\makeNSIS.exe";
        Process.Start(psi);

我做错了什么?

2 个答案:

答案 0 :(得分:0)

NSIS.exe不是编译器,MakeNSIS.exe是! Stubs,Plugins和Include目录也是必需的,也可能是Contribs目录。

答案 1 :(得分:0)

我知道这是一个老问题,但是我对此有一种可能的解决方案。 如果您使用C#(WinForm,WPF等)编写应用程序,则可以使用以下代码:

ProcessStartInfo startInfo = new ProcessStartInfo
                {
                    CreateNoWindow = true,
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    //Path to makensis.exe
                    FileName = "C:\\NSIS\\makensis.exe",
                    //make the window Hidden
                    WindowStyle = ProcessWindowStyle.Hidden,
                    //Source to your nsis script
                    Arguments = "D:\\Script\\myapp.nsi"
                };
                try
                {
                    using (Process exeProcess = Process.Start(startInfo))
                    {
                        exeProcess.WaitForExit();
                    }
                }
                catch (Exception exc)
                {
                    // handle exception
                }

在很多情况下,这对我来说是一个通用解决方案。