Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community

At 05 AUG 2007 12:42:51PM Kauko Laurinolli wrote:

Anyone using NSIS (Nullsoft Scriptable Install System)?

Could it be possible to get some "Code Examples" to get started with it?

Thanks


At 05 AUG 2007 09:29PM Jim Vaughan wrote:

; Tactic client install 
; written Jim Vaughan 11/5/06 
 
!include "MUI.nsh" 
!include "Library.nsh" 
 
; General  
; The name of the installer 
Name "Tactic Version 5.2.12" 
 
; The file to write 
OutFile "Setup.exe" 
 
; icon to use 
!define MUI_ICON c:\oi32\WTACTIC.ICO 
!define MUI_UNICON c:\oi32\WTACTIC.ICO 
 
; welcome page icon 
!define MUI_WELCOMEFINISHPAGE_BITMAP TACTIC.BMP 
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH 
 
; default install directory 
InstallDir C:\Tactic 
 
;-------------------------------------------------------- 
; Pages  
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE Tactic_run 
!insertmacro MUI_PAGE_WELCOME 
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE directory 
!insertmacro MUI_PAGE_DIRECTORY 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_PAGE_FINISH 
 
!insertmacro MUI_UNPAGE_WELCOME 
!insertmacro MUI_UNPAGE_CONFIRM 
!insertmacro MUI_UNPAGE_INSTFILES 
!insertmacro MUI_UNPAGE_FINISH 
 
;-------------------------------------------------------- 
;Languages 
 
  !insertmacro MUI_LANGUAGE "English" 
 
Section "Install" 
 
;-------------------------------------------------------- 
; Tactic files 
SetOutPath $INSTDIR 
File /r "c:\oi32\*.*" 
 
;-------------------------------------------------------- 
; Copy DLL files  
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\COMMDLG.DLL $SYSDIR\COMMDLG.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\COMPOBJ.DLL $SYSDIR\COMPOBJ.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\CTL3D.DLL $SYSDIR\CTL3D.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\CTL3DV2.DLL $SYSDIR\CTL3DV2.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\DDEML.DLL $SYSDIR\DDEML.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\MFC250.DLL $SYSDIR\MFC250.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\MFCO250.DLL $SYSDIR\MFCO250.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\MFCOLEUI.DLL $SYSDIR\MFCOLEUI.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\NWCALLS.DLL $SYSDIR\NWCALLS.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\ODBC.DLL $SYSDIR\ODBC.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\ODBCINST.DLL $SYSDIR\ODBCINST.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLE2.DLL $SYSDIR\OLE2.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLE2CONV.DLL $SYSDIR\OLE2CONV.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLE2DISP.DLL $SYSDIR\OLE2DISP.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLE2NLS.DLL $SYSDIR\OLE2NLS.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLE2PROX.DLL $SYSDIR\OLE2PROX.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLECLI.DLL $SYSDIR\OLECLI.DLL $SYSDIR 
!insertmacro I
nstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\OLESVR.DLL $SYSDIR\OLESVR.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\QELIB.DLL $SYSDIR\QELIB.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\QEUTIL.DLL $SYSDIR\QEUTIL.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\QLDBF.DLL $SYSDIR\QLDBF.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\QLTXT.DLL $SYSDIR\QLTXT.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\QLXLS.DLL $SYSDIR\QLXLS.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\SPIN.VBX $SYSDIR\SPIN.VBX $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\SSPP20.VBX $SYSDIR\SSPP20.VBX $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\STORAGE.DLL $SYSDIR\STORAGE.DLL $SYSDIR 
 
; Copy graphics server files  
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\asycfilt.dll $SYSDIR\asycfilt.dll $SYSDIR 
!insertmacro InstallLib REGDLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\graphs32.ocx $SYSDIR\graphs32.ocx $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\GSPROP32.DLL $SYSDIR\GSPROP32.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\GSW32.EXE $SYSDIR\GSW32.EXE $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\GSWAG32.DLL $SYSDIR\GSWAG32.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\GSWDLL32.DLL $SYSDIR\GSWDLL32.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFBMP13N.DLL $SYSDIR\LFBMP13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFCLP13N.DLL $SYSDIR\LFCLP13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFCMP13N.DLL $SYSDIR\LFCMP13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFEPS13N.DLL $SYSDIR\LFEPS13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFFAX13N.DLL $SYSDIR\LFFAX13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFFPX7.DLL $SYSDIR\LFFPX7.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFFPX13N.DLL $SYSDIR\LFFPX13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFGIF13N.DLL $SYSDIR\LFGIF13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFJ2K13N.DLL $SYSDIR\LFJ2K13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFKODAK.DLL $SYSDIR\LFKODAK.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFPCD13N.DLL $SYSDIR\LFPCD13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFPCX13N.DLL $SYSDIR\LFPCX13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFPNG13N.DLL $SYSDIR\LFPNG13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFPNM13N.DLL $SYSDIR\LFPNM13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFPSD13N.DLL $SYSDIR\LFPSD13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFTGA13N.DLL $SYSDIR\LFTGA13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFTIF13N.DLL $SYSDIR\LFTIF13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFXBM13N.DLL $SYSDIR\LFXBM13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LFXPM13N.DLL $SYSDIR\LFXPM13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LTCLR13n.dll $SYSDIR\LTCLR13n.dll $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LTDIS13N.DLL $SYSDIR\LTDIS13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED 
C:\OI32\SYS_DLL\GS\LTEFX13N.DLL $SYSDIR\LTEFX13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LTFIL13N.DLL $SYSDIR\LTFIL13N.DLL $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\ltimg13n.dll $SYSDIR\ltimg13n.dll $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\ltkrn13n.dll $SYSDIR\ltkrn13n.dll $SYSDIR 
!insertmacro InstallLib DLL 1 REBOOT_PROTECTED C:\OI32\SYS_DLL\GS\LVKRN13N.DLL $SYSDIR\LVKRN13N.DLL $SYSDIR 
 
; install ocx 
!insertmacro InstallLib REGDLL 1 REBOOT_PROTECTED C:\OI32\vsprint7.ocx $SYSDIR\vsprint7.ocx $SYSDIR 
!insertmacro InstallLib REGDLL 1 REBOOT_PROTECTED C:\OI32\SRP.ocx $SYSDIR\SRP.ocx $SYSDIR 
!insertmacro InstallLib REGDLL 1 REBOOT_PROTECTED C:\OI32\csXGraph.ocx $SYSDIR\csXGraph.ocx $SYSDIR 
 
; copy ini files 
SetOutPath $WINDIR 
File C:\OI32\SYS_DLL\OINSIGHT.INI 
 
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\WOW" "DefaultSeparateVDM" "Yes" 
; set the installation directory as the destination for the following actions 
setOutPath $INSTDIR 
 
CreateDirectory "$SMPROGRAMS\Tactic" 
CreateShortCut "$SMPROGRAMS\Tactic\Tactic.lnk" "$INSTDIR\Tactic.exe"   
CreateShortCut "$SMPROGRAMS\Tactic\Manual.lnk" "$INSTDIR\TACTIC.PDF"  
 
; run crypkey install, note this program only runs under NT 
ExecWait '"$INSTDIR\SetupEx.EXE"' 
 
; create the uninstaller 
writeUninstaller $INSTDIR\uninstall.exe 
 
; write to contol panel un-install 
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tactic" \ 
                 "DisplayName" "Tactic" 
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tactic" \ 
                 "UninstallString" "$INSTDIR\uninstall.exe" 
 
sectionEnd 
 
;-------------------------------------------------------- 
section "uninstall" 
  
; first, delete the install dir 
RMDir /r /REBOOTOK $INSTDIR 
 
; second, remove the link from the start menu 
RMDir /r /REBOOTOK $SMPROGRAMS\Tactic 
 
; delete from contol panel un-install 
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tactic" 
 
sectionEnd 
 
;-------------------------------------------------------- 
Function Tactic_run 
  ; Check if Tactic is running 
 
  FindProcDLL::FindProc "OINSIGHT.exe" 
  IntCmpU $R0 1 Tactic_in_use Continue Continue 
 
  Tactic_in_use: 
  MessageBox MB_OK  "Can't install, Tactic is running." 
  Abort "" 
 
Continue: 
 
FunctionEnd 
 
;-------------------------------------------------------- 
Function directory 
 
; is Tactic already installed 
IfFileExists $INSTDIR\OENGINE.EXE TacticInstalled Continue3 
 
TacticInstalled: 
 
MessageBox MB_YESNO "This directory contains a copy of Tactic replace this copy?" IDYES Continue2 IDNO false 
 
false: 
Abort "" 
goto Continue3 
 
Continue2: 
  MessageBox MB_OK  "Be sure to export your files if instructed to do so by the installation instructions." 
 
Continue3: 
FunctionEnd[/color][/size]         
               

At 06 AUG 2007 11:18AM Kauko Laurinolli wrote:

Thank you very much.

I will study it and try to learn.


At 06 AUG 2007 03:09PM Gerald Lovel wrote:

NSIS is beautiful. I have batch files, ADMIN login icons, RBasic procs, and NSIS scripts to build releases. Works great. Here is my basic script to build the ATLAS Framework:

;NSIS Modern User Interface

;ATLAS Application Framework Script

;Written by Gerald Lovel

;——————————–

;Include Modern UI

!include "MUI.nsh"

;——————————–

;General

;define compression for minimum size
;SetCompressor /SOLID LZMA
;Name and file
Name "ATLAS Framework"
OutFile "S:\atlasdev\releases\ATLAS (1.0.1.1) Setup.exe"
;Default installation folder
InstallDir "$PROGRAMFILES\ATLAS\OpenInsight"
;Installer icon
Icon "S:\ATLASDEV\Install\ATLAS.ico"
;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\ATLAS Framework" ""
;other options
AllowRootDirInstall true
XPStyle on

;——————————–

;Variables

Var MUI_TEMP
Var STARTMENU_FOLDER

;——————————–

;Interface Settings

!define MUI_ABORTWARNING

;——————————–

;Pages

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "S:\atlasdev\Install\ATLAS License.txt"
!insertmacro MUI_PAGE_DIRECTORY
;Start Menu Folder Page Configuration
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\ATLAS Framework" 
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH

;——————————–

;Languages

!insertmacro MUI_LANGUAGE "English"

;——————————–

;Installer Sections

Section "Dummy Section" SecDummy

SetOutPath "$INSTDIR"
;ADD YOUR OWN FILES HERE...
File /a /r S:\ATLAS\OpenInsight\*.*
File /a /oname=OEngine.dll "S:\atlasdev\install\ATLAS OEngine.run"
File /a "S:\atlasdev\install\ATLAS readme.txt"
File /a /oname=oilogon.bmp "S:\atlasdev\install\ATLAS.bmp"
;Store installation folder
WriteRegStr HKCU "Software\ATLAS Framework" "" $INSTDIR
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;Create shortcuts
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
SetOutPath "$INSTDIR"
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Administrator.lnk" "$INSTDIR\OINSIGHT.exe" "/AP=ATLAS /UN=ADMIN" 
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Supervisor.lnk" "$INSTDIR\OINSIGHT.exe" "/AP=ATLAS /UN=SUPER /HI=1" "$INSTDIR\Icons\ATLAS.ico"
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\User00.lnk" "$INSTDIR\OINSIGHT.exe" "/AP=ATLAS /UN=USER00 /HI=1" "$INSTDIR\Icons\ATLAS.ico"
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Read Me.lnk" "$INSTDIR\ATLAS Readme.txt"
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_END

SectionEnd

;——————————–

;Descriptions

;Language strings
LangString DESC_SecDummy ${LANG_ENGLISH} "A test section."
;Assign language strings to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

;——————————–

;Uninstaller Section

Section "Uninstall"

;ADD YOUR OWN FILES HERE...
Delete "$INSTDIR\*.*"
Delete "$INSTDIR\Uninstall.exe"
RMDir /r "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
;remove the start menu program icons
Delete "$SMPROGRAMS\$MUI_TEMP\Administrator.lnk"
Delete "$SMPROGRAMS\$MUI_TEMP\Supervisor.lnk"
Delete "$SMPROGRAMS\$MUI_TEMP\User00.lnk"
Delete "$SMPROGRAMS\$MUI_TEMP\Read Me.lnk"
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
;Delete empty start menu parent directories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
startMenuDeleteLoop:
ClearErrors
  RMDir $MUI_TEMP
  GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
  IfErrors startMenuDeleteLoopDone
  StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
startMenuDeleteLoopDone:
DeleteRegKey /ifempty HKCU "Software\ATLAS Framework"

SectionEnd


At 16 AUG 2007 07:17PM Clay Borne wrote:

Can you run RSKInstall in NSIS?


At 17 AUG 2007 01:02AM Jim Vaughan wrote:

]] RSKInstall «

I assume so, if that is executable in someway; I run other ".exe" from NSIS (by way of example that's how I install some drivers we need, I run a program called SetupEx.exe).

BTW For a full install I just distributes the entire c:\oi32 directory (my OI install directory) after stripping out all the development only stuff, removing source code and replacing my oengine with the run time copy.

For upgrades I wrote my own upgrade logic, it works like "Check in" only it copies in all my new object code / form logic etc. from temporary tables and then closes my application. Tod this I create a zip of the new code in temporary tables. They select upgrade and point it at the location of this zip file (called upgarade.tac). I unzip the file. Attach the tables and copy over the new records…


At 17 AUG 2007 06:29AM [url=http://www.sprezzatura.com]The Sprezzatura Group[/url] wrote:

You can use the RDKINSTP.DLL function.

pre.code {

 background-color: #E5E5E5;
 border: 1px solid #000000;
 width: 450px;
 padding: 5px;
 font-family: courier, verdana, arial, serif;
 margin: 0px 10px auto;

}

StartOI( HWND, LPSTR, LPSTR, LPSTR, LPSTR );
RunOICommand( HWND, LPSTR );
ShutdownOI();

StartOI( parentHandle, appID, startingDir, userName, passWord)
RunOICommand( parentHandle, commandString );

There are a few others related to the command panel, but I don't think you'll want them for NSIS.

The Sprezzatura Group

World leaders in all things RevSoft


At 17 AUG 2007 08:54AM Clay Borne wrote:

Thanks!


At 17 AUG 2007 08:56AM Clay Borne wrote:

That's a pretty good idea. You don't have to worry about too many externals…

View this thread on the Works forum...

  • third_party_content/community/commentary/forums_works/f905db9d123e4cdf8525732e005bd0ad.txt
  • Last modified: 2024/01/04 20:57
  • by 127.0.0.1