dracoblue.net

A Windows Package Management System

I am working on a package system, which is described in this post. It will be often updated.

Executables

pkg.exe

This comandline tool ist for all stuff about installing/uninstalling or upgrading. It has accesse to the database of installed software packages and can handle dependencies.

It is able to install package files and packages from web/file-archives.

Parameters

pkg action filename[|packagename]

  • actions:
    • install installs the package
    • uninstall removes all of this package, except the settings
    • remove deletes everything of the package (also settings!)
    • upgrade Upgrades a package
    • info Prints general information about the package.

File-format

Package Index

There is an index file, containing all installed software. Its called database.xml.

Example:

<?xml version="1.0" encoding="utf-8"?>
&lt;wnp>
&lt;packages>
&lt;installed>
&lt;package name="firefox" version="2.0.1" language="deDE" file="firefox-deDE-2.0.1.wnp" />
&lt;package name="azureus" version="1.5" language="enEN" file="azureus-enEN-1.5.wnp" />
&lt;/installed>
&lt;/packages>
&lt;/wnp>

Package .wnp

A

wi ndows
package is in general a zip-archive with predefined style.

It always contains the following things:

  • index.xml Contains important data about the package. Packagetypes:
    • application Packages which have application type can be installed via the normal view.
    • library Those packages are libraries needed for execution of applications, they are only visible in expert mode.
    • addon Addons are additions to application and also not visible in normal view.
    Example: ``` <wnp> <package name="azureus" version="1.5.0.6" language="enEN" type="application"> <detail name="description">Free Bittorrent client made by Aeltis</detail> <complies feature="DotTorrent_Handler" /> <requires feature="java" version="1.5-1.6" /> <instructions name="install" file="install.pii" /> <instructions name="remove" file="remove.pii" /> </package> </wnp> ```
  • instructions (directory) Instructions for install, remove, uninstall & upgrade
  • files (directory) Contains all files used by the installer. [em](Can be empty, must exist)[/em]

Lua-Functions

This part describes all functions a install/uninstall script can use. It is very useful to check if a package can be installed or to perform specific actions, needed to install the software.

Package

  • pkg.export (pkgfilename,exportedfilename) : true/false Extract a file to a specific filename
  • pkg.fileexists (pkgfilename) : true/false Check if a file exists in the archive.
  • pkg.fileconten t (pkgfilename) : string/nil Return the package file's content

Filesystem

  • fs.fileexists (filename) : true/false Check wether a file exists in the filesystem
  • fs.filecontent (filename) : string/nil Return a file's content
  • fs.filesetcontent (filename,content) : true/false Return a file's content
  • fs.delete (name) : true/false Deletes folders and clients, returns if it was possible.
  • fs.copy (source,target) : true/false Copys a source to a target location.
  • fs.chdir (dirname) Switches to this directory
  • fs.dir (): string Returns current directory
  • fs.setAttributes (filename,attr) Example:
    • fs.setAttributes('example.txt',FILE_ATTRIBUTE_READONLY+FILE_ATTRIBUTE_HIDDEN)
    Attrvalues:
    • FILE_ATTRIBUTE_READONLY
    • FILE_ATTRIBUTE_HIDDEN
    • FILE_ATTRIBUTE_SYSTEM
    • FILE_ATTRIBUTE_ARCHIVE
    • FILE_ATTRIBUTE_NORMAL
    • FILE_ATTRIBUTE_TEMPORARY
    • FILE_ATTRIBUTE_OFFLINE
  • fs.fileinfo (filename,key) : string Possible Values for [em]Key[/em]
    • CompanyName
    • FileDescription
    • FileVersion
    • InternalName
    • LegalCopyRight
    • LegalTradeMarks
    • OriginalFileName
    • ProductName
    • ProductVersion
    • Comments
    • SpecialBuild
    • PrivateBuild
  • fs.fileversion (filename) : string Returns the version of the file. (Can be different from fs.fileinfo's data)
  • fs.extractfilepath (filename) : string Returns path to the file/folder.

Registry

  • reg.read (rootkey,type,key,var) : string/float/int Returns content of a registry key.
  • reg.write(rootkey,type,key,var,value) : true/false Sets a value of a registry key.types: 'INT','FLOAT,'STRING' rootkey: 'HKEY_CURRENT_USER','HKEY_LOCAL_MACHINE','HKEY_CLASSES_ROOT','HKEY_CURRENT_CONFIG','HKEY_USERS'

Operating System

  • os.sleep (seconds) Script will sleep for the amount of seconds
  • os.beep () Create an audio beep.
  • os.msg (message) Show a message as HintBox
  • os.build () : majorversion , minversion , build Return the versiondetails about the windows version
  • os.computer () : string Returns the computer's name
  • os.login () : string Return the loginname of the current user.
  • os.captureconsole (cmdline) : string Returns what was returned after [em]cmdline[/em] was executed.
  • pkg_dir Var which contains path to the pkg-directory, must be used to include the pkg-library.
  • print_r (element) Prints a php's print_r-alike information about an element.

Archives

  • zip.list (zipname) : Table Returns information in an table, which has following structure: [Path\..\Folder\Filename] => Table { { [packed_size] => 2406 [crc] => E7141879 [size] => 4911 }
  • zip.extract (zipname,file,todir,overwrite,fullpath) Exports [em]file[/em] (optional, default:all files) from [em]zipname[/em] and puts it into [em]todir[/em] (optional, default:current directory). If [em]overwrite[/em] is set (optional, default: true) all files will be replaced, if they exist. If you set [em]fullpath[/em] (optional, default:true) the files are exported with path information saved in the zip archive. Set it to false, if you want to lose the path information.
  • zip.insert (zipname,filename) Inserts [em]filename[/em] (with path from the current directory) to the zipfile named with [em]zipname[/em].
  • zip.delete (zipname,filename) Removes the file from the archive
  • zip.create (zipname) Creates an ziparchive.
  • zip.remove (zipname) Removes the ziparchive.

Features

  • feature.add (featurename,version,lang) : Boolean Adds a new feature (version and lang are optional parameters) [em] Hint: Only available in detect\*.lua-Scripts[/em]
  • feature.delete (featurename,version,lang) : Boolean Removes a feature. [em] Hint: Only available in detect\*.lua-Scripts[/em]
  • feature.detail (featurename,key) Returns a detail about a feature
  • feature.setdetail (featurename,key,value) Sets a detail about a feature

Doc-Updates:

  • Added docs for feature-functions and some of the filesystem functions 15th March 2007
  • Added new functions 14th March 2007
  • New functions 5th March 2007
  • Update 21 Feb 2007
  • Initial Version 14th Feb 2007
In project, wnp by
@ 15 Mar 2007, Comments at Reddit & Hackernews

Give something back

Were my blog posts useful to you? If you want to give back, support one of these charities, too!

Report hate in social media Campact e.V. With our technology and your help, we protect the oceans from plastic waste. Gesellschaft fur Freiheitsrechte e. V. The civil eye in the mediterranean

Recent Dev-Articles

Read recently

Recent Files

About