Народ, помогите разобраться. Пытаюсь создать свой кастом экшн на С#:
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
Form1 form = new Form1();
if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
return ActionResult.Success;
return ActionResult.UserExit;
}
}
<Binary Id='MyDialog.dll' SourceFile='$(var.MyDialog.TargetPath)'/>
<CustomAction Id='MyDialog' Return='check' DllEntry='CustomAction1' BinaryKey='MyDialog.dll' />
<InstallExecuteSequence>
<Custom Action="MyDialog" After="InstallFiles"/>
</InstallExecuteSequence>
При запуске инсталляции получаю ошибку:
"There is a problem with this windows installer package. A DLL required for this install to complete could not be run..."
Кто знает в чем тут дело?
Версия викса 3.0.4116.
Здравствуйте, Аноним, Вы писали:
А>Кто знает в чем тут дело?
1. Надо wix обновить, он раньше референсы не отслеживал.
2. Код который вызывает Windows Forms надо запускать отдельным потоком со STA апартментом.
Примерно так:
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
var thread = new Thread(() =>
{
using (var dlg = new FooDialog())
{
dlg.Foo= session["FOO"];
if (dlg.ShowDialog() == DialogResult.OK)
{
session["FOO"] = dlg.Foo;
}
}
}) { ApartmentState = ApartmentState.STA };
thread.Start();
thread.Join();
return ActionResult.Success;
}
Оп-па, что-то я оказывается пропустил. Мне казалось, что в инсталляторах нельзя было использовать managed код, можно где-нить поглядеть инфу по этой теме?
Здравствуйте, Eclipse, Вы писали:
E>Оп-па, что-то я оказывается пропустил. Мне казалось, что в инсталляторах нельзя было использовать managed код, можно где-нить поглядеть инфу по этой теме?
http://www.rsdn.ru/Forum/message/2955801.aspxАвтор: algol
Дата: 19.05.08
http://blog.deploymentengineering.com/2008/05/deployment-tools-foundation-dtf-custom.html