Ошибка при установке базы данных оболочки совместимости в Windows 10

#c# #windows #vb6 #windows-10 #shim

#c# #Windows #vb6 #windows-10 #shim

Вопрос:

У меня возникла проблема при попытке установить базу данных оболочки совместимости (sdb-файл) в Windows 10 внутри моего установщика для старого приложения VB6. Как это обычно устанавливается в командной строке, это просто

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);
            }
        }
  

Где fileName и argument передается через параметр.

Проблема в том, что я получаю эту ошибку только во время установки. Can't install SDB file because it doesn't support any bitness that this operating system supports.

Я использовал 32-разрядную версию Compatibility Administrator, потому что приложение VB6 является 32-разрядным. Я работаю на 64-разрядной версии Windows 10 1809 сборки 17763.292. Я использовал версии System32 и SysWOW64 sdbinst.exe и я получаю ту же ошибку.

Редактировать: еще несколько деталей. Я использую администратора совместимости, расположенного в ADK для 1809, для создания новых .sdbs. Это соответствует версии Windows, которую я использую для разработчиков и на целевой платформе. Старые .sdbs отлично работают при вызове напрямую и при вызове через ProcessStartInfo. Возможно, это ошибка в администраторе совместимости 1809?

Я не уверен, что происходит. Любые предложения или альтернативы будут с благодарностью приняты.

Ответ №1:

Причиной этого было то, что я не помечал sdb-файл как встроенный ресурс в VS. Поэтому, когда установщик позже перебрал ресурсы, он не смог найти файл и выдал эту странную ошибку.