我正在开发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);
我做错了什么?
答案 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
}
在很多情况下,这对我来说是一个通用解决方案。