Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Q106070: Launch ReadMe from SetupCompleteSuccess


4 replies to this topic

ANo

ANo
  • Full Members
  • 179 posts

Posted 16 November 2010 - 15:56

Mal etwas zu: Q106070: HOWTO: Launch ReadMe from SetupCompleteSuccess

Ich habe damit jetzt kämpfen müssen. Meine Erfahrung damit:

Angenommen es soll ReleaseNotes.htm aus [INSTALLDIR]Doc\\ mit dem Standard Browser angezeigt werden

Eigenschaft LAUNCHREADME dient zum setzen der CheckBox
Eigenschaft SHOWLAUNCHREADME dient zum anzeigen / verbergen der CheckBox
Eigenschaft READMEFILETOLAUNCHATEND enthält wohl die Daten
Daten: Pfad+StandardBrowser Pfad+ReleaseNotes.htm

Zunächst erst einmal den Standard Browser ermitteln.
mit
prototype NUMBER Shell32.FindExecutableW(LPWSTR, LPWSTR, BYREF WSTRING);
...
nResult = Shell32.FindExecutableW(psHTMFile, psPath, sBrowser);
if (nResult > 32) then
sMsg = "Find browser: " + sBrowser;
endif;

Beachten muß man hierbei, daß man eine existierende ReleaseNotes.htm übergibt.
Wenn man im Vorfeld alles abklären will, dann geht halt [INSTALLDIR]Doc\\ReleaseNotes.htm nicht,
weil noch nichts installiert ist.
Aber die ReleaseNotes.htm sollte schon temporär vorliegen, entweder unter "SourceDir" oder "SETUPEXEDIR".

Hat man eine existierende Pfad+ReleaseNotes.htm bekommt man Pfad+StandardBrowser.

Damit kann man nun die Eigenschaft READMEFILETOLAUNCHATEND setzen:
READMEFILETOLAUNCHATEND = Pfad+StandardBrowser Leerzeichen [INSTALLDIR]Doc\\ReleaseNotes.htm

Dann benötigt man eine Custom Action CA_Show_ReleaseNotes; hier habe ich die Eigenschaften gesetzt:
Working Directory: Doc-Verz.
Filename&Command line: [READMEFILETOLAUNCHATEND]
Return Processing: Asynchronous (No wait for completion)
In-Script Execution: Immediate Execution
Execution Scheduling: Always execute
Auf gut deutsch die CA ist vom Type 226.

Jetzt muß man die CA noch inden SetupCompleteSuccess-Dialog einbauen. Dies sieht bei mir so aus:
OK-Button/DoAction=CA_Show_ReleaseNotes/Condition=LAUNCHREADME=1 AND READMEFILETOLAUNCHATEND<>"" AND NOT ISENABLEDWUSFINISHDIALOG AND NOT Installed

Vorteil der Aufbereitung vorher ist, daß man eine fertige Eigenschaft hat und die Release Notes ohne Ablauf der Eieruhr angezeigt werden.
Bei LaunchApplication und ShellExecute und Co. muß, wenn man es mit IS-Script macht, erst die IS-Engine geladen werden.

Gruß
André

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 17 November 2010 - 16:42

Eine Alternative zum Auslesen des Standard-Browsers wäre es, shelexec.exe mitzuliefern aud aufzurufen.

ANo

ANo
  • Full Members
  • 179 posts

Posted 19 November 2010 - 08:44

Hallo Stefan, danke für die Info.
Nur ist es gerade auch ein Punkt von anderen, was wir vermeiden wollten - die Shelexec.exe einzubinden.
Ich denke wenn man so etwas macht sollte die binär eingebunden werden - aus Sicherheitsgründen.
Jedenfalls schmeckt uns diese exe-Datei nicht.

Eine Frage hätte ich, wo kommt die Datei eigentlich her?
Von http://www.naughter.com/shelexec.html?
Ich bekomme nur mit, daß diese Freeware ist und auf die API ShellExecute zugreift.

Gruß André

ANo

ANo
  • Full Members
  • 179 posts

Posted 19 November 2010 - 08:49

Hier noch ein Tipp, wie man den Link formatieren sollte/kann - wegen der Leerzeichen und so.

prototype GEN_Format_HTMLLink( STRING, BYREF STRING );

////////////////////////////////////////////////////////////////////////////////
// Function: GEN_Format_HTMLLink
// Purpose:
// C:\Program Files (x86)\Company\Product 8.8\Doc\Release Notes deu.htm
//--> file:///C:/Program%20Files%20(x86)/Company/Product%208.8/Doc/Release%20Notes%20deu.htm
////////////////////////////////////////////////////////////////////////////////
function GEN_Format_HTMLLink( sFile, sFileFormatted )
begin
// Replace space with %20.
StrReplace ( sFile, " ", "%20", 0 );
// Replace \ with /.
StrReplace ( sFile, "\\", "/", 0 );
sFileFormatted = "file:///" + sFile;
return 0;
end;

Gruß
André

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 22 November 2010 - 10:30

Wo shelexec.exe ursprünglich her stammt weiß ich auch nicht. Sie geistert jedenfalls schon seit vielen Jahren durchs Netz. Notfalls kann man das ShellExecute Windows API auch selbst aufrufen, müsste mit InstallShield's Custom Action Typ "any DLL" gehen.