Fog Creek Software
Discussion Board




Joel,is there a functional spec for FogBugz Setup?

It might be helpful if you put up the functional spec for the Setup program (with potentially sensitive parts changed or removed).  I think it'd be a cool educational tool.

However, I'd understand if you blew by the formal functional specification step too.  I promise not to throw rocks if you did.  ;)

Crimson
Wednesday, October 09, 2002

http://www.joelonsoftware.com/RandomStuff/FB30SetupSpec.htm

Joel Spolsky
Wednesday, October 09, 2002

Excellent! :-)

John Topley
Wednesday, October 09, 2002

Very interesting to see an actual spec. I would love to see more of those secret design documents if you care to share them sometime.

One thing though:

<quote src="FogBUGZ 3.0 Setup Spec">
FogBUGZ setup does not use InnoSetup.
This is because InnoSetup cannot run custom code before it starts unpacking files. <quote>

Yes, I know that I am burdened with the pathetic religious mind of a high school kid when it comes to defending certain products and you already explained a gazilion good reasons why you had to build your own setup application, but this statement is incorrect.

You can run any code, any time in Inno Setup if you use Inno Setup extensions:

<quote src=" http://www.wintax.nl/isx/ ">
- Support for extracting and calling DLL, EXE or other files from the Pascal script before, during or after the installation.
</quote>

Jan Derk
Wednesday, October 09, 2002

Yeah but how do you call a DLL if you haven't extracted it yet?

That conflicts with the single-file requirement.

Joel Spolsky
Wednesday, October 09, 2002

I was curious Joel if you could name specifics about MSI that turned it off for you?  I personally find the tree structure to be completely counter-intuitive.

Lucas Goodwin
Wednesday, October 09, 2002

You would use the ExtractTemporaryFile method.

<quote src="Inno Setup Extensions Help File">
Prototype:
function ExtractTemporaryFile(const FileName: String): Boolean;

Description:
Extracts the specified file from the [Files] section to a temporary directory. To find the location of the temporary directory use ExpandConstant('{tmp}').

The extracted files are automatically deleted when Setup exits.

Returns True if the file was extracted succesfully and False if it wasn't extracted succesfully or if the file wasn't found or if the file was found be couldn't be processed because of its 'MinVersion' and/or 'OnlyBelowVersion' parameters.

Remarks:
Use 'CopyMode: dontcopy' in the [Files] section to tell Setup to skip the file during the normal file copying stage.
</quote>

Jan Derk
Wednesday, October 09, 2002

I didn't even know about the "extended" version of innosetup. (Still wouldn't have used it).

As for windows installer: the last time I had to install a program that required Windows Installer I first had to install Windows Installer, which required a reboot, and then installing the program itself required a reboot, and it made me really angry. It's way too complicated and overengineered and overkill and every time Microsoft does another version of their setup technologies, it gets worse.

Joel Spolsky
Wednesday, October 09, 2002

Sweet.  Much appreciated!

Crimson
Thursday, October 10, 2002

Joel:  LMAO!  That's exactly what I was arguing to a fellow reader about with Windows Installer after reading your spec as well.  In fact the VS.NET team dedicated a LOT of time just to minimize the number of reboots for the installer and one that they could never remove was that damned windows installer reboot.

Lucas Goodwin
Thursday, October 10, 2002

*  Recent Topics

*  Fog Creek Home