On Thursday 22 January 2009 15:13, Zero3 at freenetproject.org wrote:
> Author: Zero3
> Date: 2009-01-22 15:13:07 +0000 (Thu, 22 Jan 2009)
> New Revision: 25210
>
> Added:
> trunk/apps/wininstaller/BuildAll.cmd
> trunk/apps/wininstaller/bin/
> trunk/apps/wininstaller/compiler/
> trunk/apps/wininstaller/compiler/AutoHotkeySC_Normal.bin
> trunk/apps/wininstaller/compiler/AutoHotkeySC_VistaElevated.bin
> trunk/apps/wininstaller/src_freenethelpers/
> trunk/apps/wininstaller/src_freenethelpers/FreenetLauncher.ahk
> trunk/apps/wininstaller/src_freenethelpers/FreenetStart.ahk
> trunk/apps/wininstaller/src_freenethelpers/FreenetStop.ahk
> trunk/apps/wininstaller/src_freenetinstaller/
> trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller.ahk
> trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Header.png
> trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Icon.ico
>
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_FileInstalls.inc
>
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Helpers.inc
>
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Info.inc
>
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Uninstaller.ahk
> trunk/apps/wininstaller/src_freenetinstaller/files_bundle/
> trunk/apps/wininstaller/src_freenetinstaller/files_bundle/Ntrights.exe
> trunk/apps/wininstaller/src_freenetinstaller/files_bundle/RemProf.exe
>
trunk/apps/wininstaller/src_freenetinstaller/files_bundle/jre-online-installer.exe
> trunk/apps/wininstaller/src_freenetinstaller/files_bundle/netuser.exe
> trunk/apps/wininstaller/src_freenetinstaller/files_install/
>
trunk/apps/wininstaller/src_freenetinstaller/files_install/LICENSE.Freenet
>
trunk/apps/wininstaller/src_freenetinstaller/files_install/LICENSE.Mantissa
> trunk/apps/wininstaller/src_freenetinstaller/files_install/bin/
>
trunk/apps/wininstaller/src_freenetinstaller/files_install/bin/wrapper-windows-x86-32.exe
> trunk/apps/wininstaller/src_freenetinstaller/files_install/freenet.ico
> trunk/apps/wininstaller/src_freenetinstaller/files_install/lib/
>
trunk/apps/wininstaller/src_freenetinstaller/files_install/lib/wrapper-windows-x86-32.dll
> trunk/apps/wininstaller/src_freenetinstaller/files_install/plugins/
> trunk/apps/wininstaller/src_freenetinstaller/files_install/seednodes.fref
> trunk/apps/wininstaller/src_freenetinstaller/files_install/startssl.pem
> trunk/apps/wininstaller/src_freenetinstaller/files_install/wrapper.conf
> Log:
> Initial commit of native Windows installer
>
...
> Added: trunk/apps/wininstaller/src_freenethelpers/FreenetLauncher.ahk
> ===================================================================
...
> +;
> +; Try browser: FireFox
> +;
> +RegRead, _FFVersion, HKEY_LOCAL_MACHINE, SOFTWARE\Mozilla\Mozilla Firefox,
CurrentVersion
> +
> +If (!ErrorLevel && _FFVersion <> "")
> +{
> + RegRead, _FFPath, HKEY_LOCAL_MACHINE, SOFTWARE\Mozilla\Mozilla
Firefox\%_FFVersion%\Main, PathToExe
> +
> + If (!ErrorLevel && _FFPath <> "" && FileExist(_FFPath))
> + {
> + Run, %_FFPath% "%_URL%", , UseErrorLevel
> + ExitApp, 0
> + }
> +}
> +
> +;
> +; Try browser: Internet Explorer
> +;
> +IfExist, %A_ProgramFiles%\Internet Explorer\iexplore.exe
> +{
> + Run, %A_ProgramFiles%\Internet Explorer\iexplore.exe "%_URL%", ,
UseErrorLevel
> + ExitApp, 0
> +}
> +
> +;
> +; No usable browser found
> +;
> +PopupErrorMessage("Freenet Launcher was unable to find a supported
browser.`n`nPlease install one of the supported browsers, or
manually`nnavigate to the URL inside freenet.url.dat.`n`nFreenet Launcher
supports the following browsers:`n- Mozilla FireFox`n- Internet Explorer (not
recommended)")
> +ExitApp, 1
Can't we just fall back to using the system browser? We should not give the
impression that we support Internet Explorer in any way, shape or form!
Trying Firefox makes sense, of course.
...
> Added: trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller.ahk
> ===================================================================
> --- trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller.ahk
>
(rev 0)
> +++ trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller.ahk
2009-01-22 15:13:07 UTC (rev 25210)
> @@ -0,0 +1,393 @@
> +;
> +; Windows Freenet Installer by Zero3 (zero3 that-a-thingy zero3
that-dot-thingy dk) - http://freenetproject.org/
> +;
> +
> +;
> +; Don't-touch-unless-you-know-what-you-are-doing settings
> +;
> +#NoEnv ;
> Recommended for performance and compatibility with future
AutoHotkey releases
> +#NoTrayIcon ; We won't need
> this...
> +#SingleInstance ignore ; Only
> allow one instance of at any given time
(theoretically, if we allowed multiple, we could run into some temp files
problems)
> +#Include FreenetInstaller_Include_Info.inc ; Include
> version and build
info (which should be updated by the compiler bot before compiling this
installer)
> +
> +SendMode, Input ;
> Recommended for new scripts due to its superior
speed and reliability
> +SetFormat, FLOAT, 0.0 ;
> Remove trailing zeroes on floats. We won't
need the precision and it looks stupid with numbers printed with 27 trailing
zeroes
> +StringCaseSense, Off ; Treat A-Z as
> equal to a-z when comparing
strings. Useful when dealing with folders, as Windows treat them as equals.
> +_FontSize := 9 ; Our
> font size. Changing this *might* mess up some of
the margin calculations! See comment for _TextHeight calculation below as
well.
> +Gui, +OwnDialogs ; Make
> messageboxes "stick" to the main GUI
> +
> +;
> +; Customizable settings
> +;
> +_GuiWidth := 450+10+10 ; Main
> GUI width. Should be the same size as
the header image + default element margins (used for the GUI window itself)
> +_StandardMargin := 12 ; Our
> standard margin. Must be at least 8 px.
> +_ButtonWidth := 100 ; Width of our
> buttons
> +
> +_RequiredJRE := 1.5 ; Java version
> required by Freenet. If not found,
user will be asked to upgrade/install via the bundled online installer
> +_UsedFreeSpace := _Inc_InstallSize+256 ; What
> we actually need.
Installation size + default datastore size
> +_RequiredFreeSpace := _UsedFreeSpace+512 ; In MB, how
> much free space do
we require to install? What we actually use + enough free space for Windows
to continue operating (in case install dir is on system drive... and to not
block the drive in general)
> +_InternalPathLength := 75 ; Length of
> longest path within the Freenet
installation. Installation will refuse to continue if install path + this
number exceeds 255 (FAT32 and NTFS limit)
> +
> +_DefaultInstallDir = %A_ProgramFiles%\Freenet ;
> Default installation
directory
> +_DefaultInstallStartMenuShortcuts := 1 ;
> Install start menu shortcut(s)
by default?
> +_DefaultInstallDesktopShortcuts := 1 ; Install
> desktop shorctu(s) by
default?
> +_DefaultBrowseAfterInstall := 1 ;
> Browse Freenet after installation by
default?
> +)
> +_InternalPathLength := 75 ; Length of
> longest path within the Freenet
installation. Installation will refuse to continue if install path + this
number exceeds 255 (FAT32 and NTFS limit)
> +
> +_DefaultInstallDir = %A_ProgramFiles%\Freenet ;
> Default installation
directory
> +_DefaultInstallStartMenuShortcuts := 1 ;
> Install start menu shortcut(s)
by default?
> +_DefaultInstallDesktopShortcuts := 1 ; Install
> desktop shorctu(s) by
default?
> +_DefaultBrowseAfterInstall := 1 ;
> Browse Freenet after installation by
default?
> +
> +;
> +; General init stuff
> +;
> +FileRemoveDir, %A_Temp%\FreenetInstaller, 1
> ; Remove any old temp
dir
> +FileCreateDir, %A_Temp%\FreenetInstaller
> ; Create a new temp dir
> +If (ErrorLevel)
> +{
> + MsgBox, 16, Freenet Installer fatal error, Freenet Installer was not
> able
to unpack necessary installation files
to:`n`n%A_Temp%\FreenetInstaller`n`nPlease make sure that Freenet Installer
has full access to the system's temporary files folder. ; 16 = Icon Hand
(stop/error)
> + ExitApp
> +}
> +SetWorkingDir, %A_Temp%\FreenetInstaller
> ; Switch to our new temp
dir as working dir. *NO* FileInstall lines before this!
> +
> +FileInstall,
FreenetInstaller_Icon.ico, %A_WorkingDir%\FreenetInstaller_Icon.ico
;
Unpack our small icon
> +Menu, Tray, Icon, FreenetInstaller_Icon.ico
> ; Set tray and GUI icon
to our icon. Must be done before any Gui command to work
> +
> +Gui, Font, s%_FontSize%, MS sans serif
> ; As default font may vary
(and thereby mess up custom positioning and layout), we should force a
specific
Localisation may also mess stuff up. Many languages use twice the width as
english does to represent the same information. You need to ensure that the
UI works no matter what language is being used.
> +
> +_StandardMargin2 := _StandardMargin-8
> +Gui, Margin, , %_StandardMargin2% ; 0=8px (which
> is minimum?). (A margin
of 2px seems to be used outside groupboxes. Need to figure out why that is.)
> +
> +_TextHeight := 2+_FontSize+2 ; 9px has 2px
> built-in margin on top on
bottom, making a normal line 13px high (except groupbox header text on
classic theme, which seem to have 3px on top and 1px on bottom)
> +_GuiWidth2 := _GuiWidth-10-10 ;
> GuiWidth - element left margin -
element right margin (used for main elements such as header image, groupboxes
and headlines)
> +_GBTopMargin := _TextHeight+(_StandardMargin/2) ;
> Pixels from y
coordinate of start of groupbox whereafter content should begin
> +_GBBottomMargin := 2+(_StandardMargin/2) ; Bottom margin
> inside a
groupbox
> +_VSpacingFromGBBottom := _GBBottomMargin+_StandardMargin ; Used when
> extra
vertical spacing after a groupbox is wanted
> +_GBHorMargin := 2+_StandardMargin ; Horizontal
> margin for text within a
groupbox (2px groupbox border + our standard margin)
> +_GuiWidth3 := _GuiWidth2-_GBHorMargin-_GBHorMargin ; GuiWidth2 -
> groupbox
left margin - groupbox right margin (used for groupbox elements)
> +_MixLineTextPush := (24/2)-(_TextHeight/2) ; Used for
> vertically
centering text on the same lines as one or more buttons.
(Buttonheight/2)-(Textheight/2)
> +
> +;
...
> +;
> +; Create our custom user
> +;
> +_CustomUserPassword := GenerateRandomNumberString(12)
> ; According to
the old installer, 12 chars is max. to avoid warnings about
backwards-compatability. The password itself is apparently also needed to run
services under a custom account.
> +RunWait, %comspec% /c "net user
Freenet%_InstallSuffix% %_CustomUserPassword% /add /comment:"Freenet service
user. Please do not
delete!" /expires:never /passwordchg:no /fullname:"Freenet%_InstallSuffix%
user"", , Hide UseErrorLevel
On the old installer we tried 3 different patterns in the hope of finding a
password that is acceptable to the user's security policy ...
> +
> +If (A_OSVersion = "WIN_VISTA")
> +{
> + RunWait, %comspec% /c "icacls "%_InstallDir%" /E /T /C /G
Freenet%_InstallSuffix%:F", , Hide UseErrorLevel
> +}
> +Else
> +{
> + RunWait, %comspec% /c "cacls "%_InstallDir%" /E /T /C /G
Freenet%_InstallSuffix%:F", , Hide UseErrorLevel
> +}
> +
> +RegWrite, REG_DWORD, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon\SpecialAccounts\UserList, Freenet%_InstallSuffix%,
0
...
> Added:
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Helpers.inc
> ===================================================================
...
> +
> + RegExMatch(_InstallDir, "i)([a-z]:\\).+", _InstallDrive)
> ; Check for a
valid drive. If found, store in _InstallDrive1 (subpattern match number 1 =
array 1)
> + If (ErrorLevel || _InstallDrive1 = "")
> + {
> + GuiControl, +cRed, _cInstallDirStatusText
> + GuiControl, Text, _cInstallDirStatusText, Invalid install path!
> + GuiControl, +Disabled, _cInstallButton
> + }
> + Else if (StrLen(_InstallDir) + _InternalPathLength > 255)
> + {
> + GuiControl, +cRed, _cInstallDirStatusText
> + GuiControl, Text, _cInstallDirStatusText, Invalid install path!
> (Too long
for file system to handle)
> + GuiControl, +Disabled, _cInstallButton
> + }
> + Else
> + {
> + DriveSpaceFree, _InstallDriveFreeSpace, %_InstallDrive1%
> + If (_InstallDriveFreeSpace < _RequiredFreeSpace)
> + {
> + GuiControl, +cRed, _cInstallDirStatusText
> + GuiControl, Text, _cInstallDirStatusText, Not enough
> free space on
installation drive!
> + GuiControl, +Disabled, _cInstallButton
> + }
> + Else IfExist, %_InstallDir%\freenet.jar
IMHO this is not reliable. If freenet auto-updates, it alternates between
freenet.jar and freenet.jar.new, you should check for both (we don't delete
the old one however, so it should be reasonable...)
You should probably check whether the directory is empty.
> +
> +TestPortAvailability(_Port)
> +{
> + global
> +
> + VarSetCapacity(wsaData, 32)
> + _Result := DllCall("Ws2_32\WSAStartup", "UShort", 0x0002, "UInt",
&wsaData) ; Request Winsock 2.0 (0x0002)
> +
> + if (ErrorLevel)
> + {
> + MsgBox, 16, Freenet Installer fatal error, Freenet Installer
> was not able
to create a Winsock 2.0 socket`nfor port availability testing. ; 16 = Icon
Hand (stop/error)
> + Exit()
> + }
> + Else If (_Result)
> ; Non-zero, which means it failed (most
Winsock functions return 0 upon success)
> + {
> + _Error := DllCall("Ws2_32\WSAGetLastError")
> + DllCall("Ws2_32\WSACleanup")
> + MsgBox, 16, Freenet Installer fatal error, Freenet Installer
> was not able
to create a Winsock 2.0 socket`nfor port availability testing
(Error: %_Error%). ; 16 = Icon Hand (stop/error)
> + Exit()
> + }
> +
> + AF_INET = 2
> + SOCK_STREAM = 1
> + IPPROTO_TCP = 6
> +
> + _Socket := DllCall("Ws2_32\socket", "Int", AF_INET, "Int",
SOCK_STREAM, "Int", IPPROTO_TCP)
> + if (_Socket = -1)
> + {
> + _Error := DllCall("Ws2_32\WSAGetLastError")
> + DllCall("Ws2_32\WSACleanup")
> + MsgBox, 16, Freenet Installer fatal error, Freenet Installer
> was not able
to create a Winsock 2.0 socket`nfor port availability testing
(Error: %_Error%). ; 16 = Icon Hand (stop/error)
> + Exit()
> + }
> +
> + SizeOfSocketAddress = 16
> + VarSetCapacity(SocketAddress, SizeOfSocketAddress)
> + InsertInteger(2, SocketAddress, 0, AF_INET)
> + InsertInteger(DllCall("Ws2_32\htons", "UShort", _Port), SocketAddress,
> 2,
2)
> + InsertInteger(DllCall("Ws2_32\inet_addr", "Str", "127.0.0.1"),
SocketAddress, 4, 4)
> +
> + If DllCall("Ws2_32\connect", "UInt", _Socket, "UInt",
&SocketAddress, "Int", SizeOfSocketAddress)
> + {
> + _Available := 1
> ; DllCall returned non-zero, e.g. fail -
> which
means port is most likely free
> + }
> + Else
> + {
> + _Available := 0
> + }
> +
> + DllCall("Ws2_32\WSACleanup")
> ; Do a cleanup (including closing of
any open sockets)
> + return _Available
> +}
> +
> +InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
> +{
> + global
> +
> + Loop, %pSize%
> ; Copy each byte in the integer into the
structure as raw binary data.
> + {
> + DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1,
> "UInt",
1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
> + }
> +}
Ewwwwwwwwwwwww!
> +
> +GenerateRandomNumberString(_RandomNumberLength)
> +{
> + global
> +
> + _RandomNumberString =
> ; Empty variable
> +
> + Loop, %_RandomNumberLength%
> + {
> + Random, _RandomNumber, 0, 9
> +
> + _RandomNumberString = %_RandomNumberString%%_RandomNumber%
> + }
> +
> + return _RandomNumberString
> +}
>
> Added:
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Info.inc
> ===================================================================
> ---
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Info.inc
(rev 0)
> +++
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Include_Info.inc
2009-01-22 15:13:07 UTC (rev 25210)
> @@ -0,0 +1,15 @@
> +;
> +; Windows Freenet Installer - Include file - Build info
> +;
> +; This file contains build info variables used for displaying info in the
installer. These values should
> +; be updated by a build script before compiling the installer. Will be
included directly into the
> +; installer (at the top) at compile time.
> +;
> +; _Inc_FreenetVersion - (string) Version of Freenet the installer contains.
> +; _Inc_FreenetBuild - (string) Build of Freenet the installer contains.
> +; _Inc_InstallSize - (float) In MB, size of all files to be installed.
> +;
> +
> +_Inc_FreenetVersion = 0.7
> +_Inc_FreenetBuild = #1204
> +_Inc_InstallSize := 9.04
>
> Added:
trunk/apps/wininstaller/src_freenetinstaller/FreenetInstaller_Uninstaller.ahk
> ===================================================================
...
> +
> +;
> +; Remove our custom user
> +;
> +Progress, , Removing custom user...
> +
> +FileInstall, files_bundle\RemProf.exe, %A_WorkingDir%\RemProf.exe
> ;
Extract 3rd party "RemProf" tool from
http://www.ctrl-alt-del.com.au/CAD_TSUtils.htm. Freeware, but not
open-source :(. Removes the profile folder and its registry entry of
specified user
> +RunWait, %A_WorkingDir%\RemProf.exe Freenet%_InstallSuffix%, , Hide
UseErrorLevel
> +FileDelete, %A_WorkingDir%\RemProf.exe
Grrrr!
> +
> +RunWait, %comspec% /c "net user Freenet%_InstallSuffix% /delete", , Hide
UseErrorLevel
> +
> +Progress, 6
> +
> +;
> +; Done!
> +;
> +Progress, Off
> +MsgBox, 64, Freenet uninstaller, Freenet has been uninstalled! ; 64 =
> Icon
Asterisk (info)
> +
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20090130/72fc2ee3/attachment.pgp>