在不同用户抛出STATUS_DLL_INIT_FAILED时启动 InstallShield 可执行文件



我已经为几个安装程序编写了一个包装器来部署和记录软件包的输出。我在实际调用可执行文件时遇到了一个问题,这让我很困惑!

在上一个版本中,我们使用本地系统帐户运行安装程序和可执行文件没有问题 - 由于这次配置InstallShield可执行文件的方式(阅读:糟糕的1),我现在必须使用具有管理员权限的Active Directory帐户调用进程(通过散列密码,在程序中解密密码,然后通过ProcessStartInfo对象调用它),如下所示:

private static void InstallPackage(string packagePath, string args = "")
{
log.DebugFormat("Entered 'InstallPackage' (packagePath: '{0}'; args: '{1}')", packagePath, args);
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = packagePath;
psi.Arguments = args;
psi.WindowStyle = ProcessWindowStyle.Hidden;
if (UseNetworkCredentials)
{
log.Debug("Network credential flag detected - using hard-coded network credentials for installation...");
psi.Domain = "FOOBAR";
psi.UserName = "SRVC_PatchInstaller";
psi.Password = NetworkCredsPassword;
psi.UseShellExecute = false;
log.DebugFormat("Network credentials configured successfully (DOMAIN: {0}, USERNAME: {1})", psi.Domain, psi.UserName);
}
log.Debug("Starting installer with specified arguments...");
Process inst = Process.Start(psi);
log.Debug("Waiting for installer exit...");
while (inst.HasExited == false)
System.Threading.Thread.Sleep(100);
log.DebugFormat("Installer process completed (Exit code: '{0}', Exit code meaning: '{1}', Duration (secs): {2})", 
inst.ExitCode, ExitCodeDescriptions.ContainsKey(inst.ExitCode) ? ExitCodeDescriptions[inst.ExitCode] : "UNKNOWN",
(inst.ExitTime - inst.StartTime).TotalSeconds.ToString("0.##"));
return;
}

当这在我们总部的一台笔记本电脑上进行测试时,这是一种享受,但现在在用户的笔记本电脑上进行测试时,这返回了以下内容:

2018-01-30 14:39:33,591 InstallPackage [DEBUG] - Entered 'InstallPackage' (packagePath: 'C:windowsccmcache4afoobar.exe'; args: '/s /f1"C:windowsccmcache4afoobar.iss"')
2018-01-30 14:39:33,624 InstallPackage [DEBUG] - Network credential flag detected - using hard-coded network credentials for installation...
2018-01-30 14:39:33,626 InstallPackage [DEBUG] - Network credentials configured successfully (DOMAIN: FOOBAR, USERNAME: SRVC_PatchInstaller)
2018-01-30 14:39:33,626 InstallPackage [DEBUG] - Starting installer with specified arguments...
2018-01-30 14:39:38,005 InstallPackage [DEBUG] - Waiting for installer exit...
2018-01-30 14:39:38,109 InstallPackage [DEBUG] - Installer process completed (Exit code: '-1073741502', Exit code meaning: 'UNKNOWN', Duration (secs): 2.24)

现在,我对此错误代码进行了一些谷歌搜索,发现退出代码实际上是NTSTATUS错误0xC0000142,也称为"STATUS_DLL_INIT_FAILED"。我还发现了与该问题相关的这些问题。导致此异常的原因是什么,我该如何解决?


1:这背后的原因是 InstallShield 可执行文件正在尝试将文件提取到C:UsersUSER_NAMEAppData文件夹中。由于 LocalSystem 帐户缺少此文件夹,安装程序会将文件提取到C:WindowsTemp文件夹,但稍后不会查看导致安装程序轰炸的同一文件夹。

我找到了问题所在 - 故障归结为 SCCM 在没有用户登录时尝试安装软件。我相信这个错误是因为 user32.dll 尚未作系统初始化。

相关内容

最新更新