Ändern Sie den Dialog "Bereit zur Installation?" (auch bekannt als VerifyReadyDlg), um eine Zusammenfassung der getroffenen Entscheidungen bereitzustellen.
Es sieht so aus:
alt text http://i46.tinypic.com/s4th7t.jpg
Führen Sie dies mit einem Javascript-CustomAction aus:
Javascript-Code:
// http://msdn.microsoft.com/en-us/library/aa372516(VS.85).aspx
var MsiViewModify =
{
Refresh : 0,
Insert : 1,
Update : 2,
Assign : 3,
Replace : 4,
Merge : 5,
Delete : 6,
InsertTemporary : 7, // kann das MSI während der Installation nicht permanent ändern
Validate : 8,
ValidateNew : 9,
ValidateField : 10,
ValidateDelete : 11
};
// http://msdn.microsoft.com/en-us/library/sfw6660x(VS.85).aspx
var Buttons =
{
OkOnly : 0,
OkCancel : 1,
AbortRetryIgnore : 2,
YesNoCancel : 3
};
var Icons=
{
Critical : 16,
Question : 32,
Exclamation : 48,
Information : 64
}
var MsgKind =
{
Error : 0x01000000,
Warning : 0x02000000,
User : 0x03000000,
Log : 0x04000000
};
// http://msdn.microsoft.com/en-us/library/aa371254(VS.85).aspx
var MsiActionStatus =
{
None : 0,
Ok : 1, // Erfolg
Cancel : 2,
Abort : 3,
Retry : 4, // auch Suspend genannt?
Ignore : 5 // überspringt restliche Aktionen; dies ist kein Fehler.
};
function UpdateReadyDialog_CA(sitename)
{
try
{
// Eigenschaften aus der Installationsitzung können wie folgt abgerufen werden:
var selectedWebSiteId = Session.Property("MSI_PROPERTY_HERE");
// Angeforderten Feature-Installationsstatus können wie folgt abgerufen werden:
var fInstallRequested = Session.FeatureRequestState("F.FeatureName");
var text1 = "Dies ist Zeile 1 des Textes im VerifyReadyDlg";
var text2 = "Dies ist die zweite Zeile des benutzerdefinierten Textes";
var controlView = Session.Database.OpenView("SELECT * FROM Control");
controlView.Execute();
var rec = Session.Installer.CreateRecord(12);
rec.StringData(1) = "VerifyReadyDlg"; // Dialog_
rec.StringData(2) = "CustomVerifyText1"; // Control - kann jeder Name sein
rec.StringData(3) = "Text"; // Typ
rec.IntegerData(4) = 25; // X
rec.IntegerData(5) = 60; // Y
rec.IntegerData(6) = 320; // Breite
rec.IntegerData(7) = 85; // Höhe
rec.IntegerData(8) = 2; // Attribute
rec.StringData(9) = ""; // Eigenschaft
rec.StringData(10) = vText1; // Text
rec.StringData(11) = ""; // Control_Next
rec.StringData(12) = ""; // Hilfe
controlView.Modify(MsiViewModify.InsertTemporary, rec);
rec = Session.Installer.CreateRecord(12);
rec.StringData(1) = "VerifyReadyDlg"; // Dialog_
rec.StringData(2) = "CustomVerifyText2"; // Control - jeder eindeutige Name
rec.StringData(3) = "Text"; // Typ
rec.IntegerData(4) = 25; // X
rec.IntegerData(5) = 160; // Y
rec.IntegerData(6) = 320; // Breite
rec.IntegerData(7) = 65; // Höhe
rec.IntegerData(8) = 2; // Attribute
rec.StringData(9) = ""; // Eigenschaft
rec.StringData(10) = text2; // Text
rec.StringData(11) = ""; // Control_Next
rec.StringData(12) = ""; // Hilfe
controlView.Modify(MsiViewModify.InsertTemporary, rec);
controlView.Close();
}
catch (exc1)
{
Session.Property("CA_EXCEPTION") = exc1.message ;
LogException("UpdatePropsWithSelectedWebSite", exc1);
return MsiActionStatus.Abort;
}
return MsiActionStatus.Ok;
}
function LogException(loc, exc)
{
var record = Session.Installer.CreateRecord(0);
record.StringData(0) = "Exception {" + loc + "}: " + exc.number + " : " + exc.message;
Session.Message(MsgKind.Error + Icons.Critical + Buttons.btnOkOnly, record);
}
Deklarieren Sie den Javascript CA:
Hängen Sie die CA an eine Schaltfläche an. In diesem Beispiel wird die CA ausgelöst, wenn auf Weiter geklickt wird vom CustomizeDlg:
Zugehörige SO-Frage: Wie kann ich zur Laufzeit den anzuzeigenden Text in VerifyReadyDlg festlegen?
0 Stimmen
Blicken Sie sich gui4wix.codeplex.com an
10 Stimmen
Als nicht konstruktiv geschlossen? Ich habe eine Menge gelernt, indem ich diese Frage gestellt habe! Ein wenig Konsistenz von StackOverflow wäre auch schön...z.B. stackoverflow.com/questions/550632/…
15 Stimmen
Es bekam '203' Likes, das reicht aus, um seine Nützlichkeit zu beweisen.
0 Stimmen
SO-Fragen müssen eine definitive, korrekte Antwort haben; offene Fragen führen dazu, dass die Fragen, die die Leute zu tatsächlichen Problemen stellen, von der Startseite abrutschen. FAQ @Si.: Diese Richtlinie war meines Wissens schon immer da, aber sie wird jetzt besser durchgesetzt; diese Frage ist fast drei Jahre alt.
0 Stimmen
Fair genug, Jim, es handelt sich um eine offene Frage, und ich denke, es liegt an der SO-Community zu entscheiden, aber ich muss sagen, dass es eigenartig erscheint, sie als nicht konstruktiv zu schließen, da ich persönlich und anscheinend auch viele andere Personen diese Frage nützlich gefunden haben (z. B. goo.gl/Zqp2X), und dass sie sehr gut zum Teil des FAQs passt, der sich mit
praktischen, beantwortbaren Fragen basierend auf tatsächlichen Problemen, mit denen Sie konfrontiert sind
befasst.0 Stimmen
Es ist nützlich (warum ich hier bin), aber es handelt sich nicht um ein Frage-und-Antwort-Spiel, sondern um eine Diskussion. Die Frage selbst scheint eine legitime Frage zu sein und die aktuell am meisten hochgevotete Antwort scheint eine legitime Antwort zu sein, aber der Rest der Antworten fügen nur ihren Senf hinzu, was es zu einer Diskussion macht.