【问题标题】:nsis installer starts in backgroundnsis 安装程序在后台启动
【发布时间】:2016-04-08 16:06:07
【问题描述】:

我知道以前有人问过这个问题。但我仍然有问题。我无法找到适合我的解决方案。

我尝试过的

  • 使用 BringToFront
  • 从 .OnInit 函数中删除所有内容
  • 完全移除 .OnInit 函数

我的代码是这样开始的

!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW wel_show
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_PRE lic_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW lic_show
!insertmacro MUI_PAGE_LICENSE "$(LICENSE_TEXT)"

还有什么我遗漏的或需要做更多的吗?

【问题讨论】:

  • 您是如何启动安装程序的?在资源管理器中双击它?
  • 另一个应用程序启动我的安装程序。
  • 这个其他应用程序的名称是什么?它使用 CreateProcess 还是 ShellExecute?启动安装程序后是否立即退出或隐藏?
  • 它是一个使用 CreateProcess 的 c++ 应用程序。在 nsis 安装程序完成其工作之前它不会退出。

标签: installation nsis


【解决方案1】:

无论是否在 Windows 8 上使用 STARTF_USESHOWWINDOW,对我来说都可以正常工作:

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
TCHAR cmd[1+MAX_PATH+1+1];
ExpandEnvironmentStrings(TEXT("\"%Temp%\\NSISTest.exe\""), cmd, ARRAYSIZE(cmd));
if (CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
}

也许您可以提供有关您的应用程序的更多信息?调用 CreateProcess 时是否有可见窗口?这个窗口是前景窗口吗?

您可以调用AllowSetForegroundWindow(ASFW_ANY) 来释放前台锁,但这不是必需的。

【讨论】:

  • 我无权访问该代码,可能我需要在那里签到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
相关资源
最近更新 更多