Я хочу сохранить файл из двоичной таблицы во временную папку в Custom Action.У меня есть два пользовательских действия, первое «немедленное», другое «отложенное».
Когда во время выполнения «немедленного» пользовательского действия я вызываю метод Microsoft.Deployment.WindowsInstaller.Record.GetStream, он выполняетне сохранять файл.
[CustomAction]
public static ActionResult ImmediateAction(Session session)
{
try
{
View view = db.OpenView("SELECT Name, Data FROM Binary");
view.Execute();
foreach (Record row in view)
{
row.GetStream("Data", Path.Combine(Environment.GetEnvironmentVariable("temp"), row.GetString("Name"));
}
return ActionResult.Success;
}
catch (Exception ex)
{
session.Log(ex.Message);
return ActionResult.Failure;
}
finally
{
db.Close();
}
}
Настраиваемое действие работает без ошибок, но файл не создается.
Обновление:
В InstallExecuteSequence настраиваемое действиеописывается так:
<InstallExecuteSequence>
<Custom Action="ImmediateAction"
Before="DeferredAction">
NOT Installed
</Custom>
<Custom Action="DeferredAction"
After="InstallInitialize">
NOT Installed
</Custom>
</InstallExecuteSequence>
Из пользовательского действия 'deferred' я не могу получить представление db, которое ожидается.И я не могу передать двоичные данные файла из «немедленного» в «отложенное» настраиваемое действие, поскольку класс System.IO.Stream не поддерживает сериализацию.