#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. Поэтому, когда установщик позже перебрал ресурсы, он не смог найти файл и выдал эту странную ошибку.