Windows 10上的兼容性shim数据库安装期间发生错误

时间:2019-04-12 21:31:47

标签: c# windows vb6 windows-10 shim

我在尝试为旧的VB6应用程序的安装程序中的Windows 10上安装兼容性shim数据库(.sdb文件)时遇到问题。

sdbinst.exe CompatibilityFix.sdb

如果执行此操作,则SDB会完美安装自己。

但是,在我的安装程序(一个C#应用程序)中,它是这样调用的

        using (var p = new Process())
        {
            p.StartInfo = new ProcessStartInfo
            {
                WorkingDirectory = SetupSupportDir,
                FileName = fileName,
                Arguments = argument,
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };
            p.OutputDataReceived += ProcessOutputDataReceived;
            p.ErrorDataReceived += ProcessErrorDataReceived;
            p.Start();
            p.BeginOutputReadLine();
            p.BeginErrorReadLine();
            p.WaitForExit();

            if (0 != p.ExitCode)
            {
                TryAction(() => Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "FAILED: {0} - ExitCode: {1}", this.setupStatus, p.ExitCode)));
                throw new InvalidOperationException("FAIL: " + this.setupStatus);
            }
        }

通过参数传递fileNameargument的地方。

问题是我仅在安装程序期间收到此错误。 Can't install SDB file because it doesn't support any bitness that this operating system supports.

我使用了32位版本的兼容性管理器,因为VB6应用程序是32位的。我在64位Windows 10 1809内部版本17763.292上运行。我使用了sdbinst.exe的System32和SysWOW64版本,但遇到相同的错误。

编辑:更多详细信息。我正在使用位于1809年ADK中的兼容性管理器来生成新的.sdbs。这与我用于开发人员和目标平台上的Windows版本匹配。当直接调用和通过ProcessStartInfo调用时,旧的.sdbs可以完美地工作。也许这是1809年兼容性管理员中的错误?

我不确定发生了什么。任何建议或替代方案将不胜感激。

1 个答案:

答案 0 :(得分:0)

其原因是我没有将.sdb文件标记为VS中的嵌入式资源。因此,当安装程序稍后遍历资源时,找不到文件并抛出该异常错误。