|
Installing DesktopAnalyzer 
First, make sure that you meet the minimum requirements for your platform, including the proper Java VM.
The download EXE is the install program for DesktopAnalyzer. After downloading, you can run DesktopAnalyzer using the default script supplied with the release.
Licensed users of DesktopAnalyzer will receive a license key that should be saved in the file key.txt. The key.txt file is used to generate signed DesktopAnalyzer EXE files
Running DesktopAnalyzer 
DesktopAnalyzer is typically used by help desk or support personnel to automate checking specified configuration parameters on end-user computer systems. Although the DesktopAnalyzer release contains a default script (script.txt), it is intended that user-specific scripts be written prior to generating signed DesktopAnalyzer EXE files.
These new, signed EXE files may then be posted to a web site or delivered to the end users to provide a single-click analysis of end-user computer systems.
DesktopAnalyzer Script File 
A DesktopAnalyzer script file identifies the series of tests to be conducted on end-user computer systems. The script file, named script.txt, is very similar in format to any Windows INI file format and can be edited using any text editor (such as notepad.exe). To create the signed EXE file, the following steps must be completed:
- Identify the [sections] or tests to be included in the script
- Configure output and input parameters
- Create validation expressions (optional)
- Test and sign the script file
A default script file, script.txt, is included with the release and may look similar to the following:
[DA]
DisplayName = DesktopAnalyzer
ScriptName = DesktopAnalyzer Project Phase 4
Submit = http://www.visualware.com/cgi-bin/da.cgi
email = visualware@visualware.com
OK = OK
WARN = WARN
ERR = ERR
ipconfig = yes
screenshot = yes
showdetail = yes
[UserForm]
DisplayName = User-Provided Identification
var1.name = name
var1.prompt = Your name
var1.len = 20
var1.allowblank = yes
var2.name = model
var2.prompt = Router model
var2.len = 20
var2.allowblank = no
[Processor]
[Memory]
[Drives]
[Windows]
# DisplayName = Windows Version
# version.warn = <5.0
# version.warn.msg = Think about upgrading to Windows NT
version.err = <4.10
version.err.msg = Windows 98 or later is required
msg.ok = Everything is OK. Your version is $version$.
msg.err = Please upgrade your version of Windows
msg.warn = WARNING: You may have trouble running
[User]
region.warn = JP
region.warn.msg = Region set to JP
[InternetExplorer]
version.err = <6.0
version.err.msg = Upgrade to Internet Explorer 6.x or later
httpver.err = -"1.1"
httpver.err.msg = Your HTTP Version is not 1.1
[NetworkEnvironment]
DisplayName = Network Environment
[InternetSecurityZone]
DisplayName = 'Internet' Security Zone settings
zone = Internet
[InternetSecurityZone]
DisplayName = 'Restricted' Security Zone settings
zone = Restricted
#[InternetSecurityZone]
# DisplayName = Testing URL in 'Restricted' Zone
# url = http://www.whitehouse.com
# zone.err = -"Restricted"
# zone.err.msg = $url$ should be in the 'Restricted' zone
[InternetSecurityZone]
DisplayName = Testing URL in 'Internet' Zone
url = https://secure.visualware.com
zone.err = -"Internet"
zone.err.msg = $url$ must be in the 'Internet' zone
[DNS]
DisplayName = DNS localhost
hostname = localhost
#[DNS]
# DisplayName = Testing DNS failure
# hostname = www.visualware.comxx
#[Application]
# DisplayName = Application (input error)
[Application]
DisplayName = Microsoft Office
find = winword.exe
name.warn = +"1997"
name.warn.msg = Office 1997 does not allow for seemless editing
name.err = not(+"1997" || +"1998" || +"2000" || +"2002" || +"XP" || +"2003" || +"2007")
name.err.msg = Office version not recognized
version.err = <9.0
version.err.msg = Version below 9.0
[Application]
DisplayName = Microsoft Java VM
find = jview.exe
version.err = ==5.00.3809
version.err.msg = Test: Security issues, upgrade Java VM
msg.warn = WARNING: upgrade
msg.err = ERROR: Upgrade your Java VM
[Application]
DisplayName = Windows Sockets
find = winsock.dll
[Application]
DisplayName = Windows Sockets 2
find = ws2_32.dll
[WebDownload]
DisplayName = HTTP Download (from Visualware)
url = http://www.visualware.com/
timeout = 30000
downloadthroughput.warn = <50000
downloadthroughput.warn.msg = download speed is less than 50kbps
[WebDownload]
DisplayName = HTTPS Download (from Visualware)
url = https://secure.visualware.com
[WebUpload]
DisplayName = HTTP Upload (to Visualware)
url = http://myspeed.visualware.com/upload.bin
uploadthroughput.warn = <50000
uploadthroughput.warn.msg = Upload speed is less than 50 kbps
[WebUpload]
DisplayName = HTTPS Upload (to Visualware)
url = https://secure.visualware.com/
uploadthroughput.warn = <50000
uploadthroughput.warn.msg = Upload speed is less than 50 kbps
[IsPortListening]
url = http://www.visualware.com
#[FileContents]
# file = c:\file.txt
# filecontents.warn = +"test"
# filecontents.warn.msg = File contains the word 'test'
[RegistryKey]
DisplayName = DWORD registry value
key = HKEY_LOCAL_MACHINE\SOFTWARE\Visualware\TrackSuite\GUIPanels\Panel0\c1
val.warn = !=16711680
val.warn.msg = Visualware Tracking Suite has been customised
#[RegistryKey]
# DisplayName = String registry value
# key = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Visualware Tracking Suite
# val.err = not(+"tscore.exe")
# val.err.msg = Visualware Tracking Suite not correctly installed
Identifying Script File Sections 
Namely, a script file is a file with [sections], with each section containing key=value lines that make up a particular test to conduct on the end user system. The [sections] or tests that DesktopAnalyzer allows are:
[Application]
[DA]
[DNS]
[Drives]
[File Contents]
[InternetExplorer]
[InternetSecurityZone]
[IsPortListening]
[Memory]
[Network Environment]
[Processor]
[RegistryKey]
[User]
[User Form]
[WebDownload]
[WebUpload]
[Windows]
Each [section] takes input parameters and produces output parameters as detailed in the tables below. In order for a
particular test to be valid, all [section] input parameters must be configured prior to signing the EXE.
Input parameters are identified in the Some tests, such as (see the columns titled "Type" in the tables below) must
be configured prior to signing the EXE. Some tests, such as [Processor] and
[Memory] do not require any input parameters to be configured. Tests may also be configured to produce
output messages and validate expressions or constraints.
[Application]
| Name |
Type |
Description |
| find |
input |
The name of an .exe ("notepad.exe"), or .dll ("winsock.dll"), application, or document file extension (".doc") to locate |
| exe |
output |
The full path name to the found exe/dll |
| name |
output |
The ProductName in the file version info ("null" if unavailable) |
| description |
output |
The FileDescriptionin the file version info ("null" if unavailable) |
| version |
output |
The ProductVersionin the file version info ("null" if unavailable) |
[DA]
| Name |
Type |
Description |
| ScriptName |
input |
The end-user visible name for this script |
| email |
input |
An email address, which enables the 'email' section of the HTML report |
| ipconfig |
input |
If set to "yes", enables the "ipconfig/all" section of the HTML report |
| showdetail |
input |
If set to "no", disables the "Show detail" checkbox [2.03] |
| screenshot |
output |
If set to "yes" will display a screenshot in the HTML report |
| version |
output |
The version of the DesktopAnalyzer engine |
[DNS]
| Name |
Type |
Description |
| hostname |
input |
The host name to perform an ip address lookup on |
| number |
output |
The number of ip address that the host name resolves to |
| iplist |
output |
The ip address list for the input hostname |
[Drives]
| Name |
Type |
Description |
| letter |
output |
per drive letter information (file system type; size; free space) |
[File Contents]
This test allows you to search for a file on your machine and search for a specified character string within the file.
| Name |
Type |
Description |
| file |
input |
the file path you want to test (e.g. c:\program files\test.txt) |
| filecontents |
output |
Displays the first line of the file contents . To test for a specific character string, use either ' - text_string' (to test for the absence of the string) or ' + text_string' (to test for the presence of the string) |
[InternetExplorer]
This test is derived from the Application test and has all the parameters of that test. The find input parameter is automatically set to iexplore.exe. This test also outputs this Internet Explorer specific parameter:
| Name |
Type |
Description |
| pack |
output |
service pack information |
| proxytype |
output |
Check for authenticated proxies on the client's network |
| proxysettings |
output |
Check proxy settings on the client's network |
[InternetSecurityZone]
This test provides a way to query the internet settings for an Internet Security Zone.
| Name |
Type |
Description |
| zone |
input |
"Computer" | "Intranet" | "Trusted" | "Internet" | "Restricted" |
| url |
input |
Automatically set the zone based upon the provided full URL (used only if zone is not present) |
| ActiveScripting |
output |
"enabled" | "prompt" | "disabled" | "na" |
| FileDownload |
output |
"enabled" | "prompt" | "disabled" | "na" |
| PersistentCookies |
output |
"enabled" | "prompt" | "disabled" | "na" |
| Popup Blocker |
output |
"enabled" | "disabled" |
| SessionCookies |
output |
"enabled" | "prompt" | "disabled" | "na" |
[IsPortListening]
This test provides a way to query a remote port on a computer to see if there is a process listening on the port.
| Name |
Type |
Description |
| url |
input |
The host and port to test as a URL: "protocol://host:port" |
| ms |
output |
Number of milliseconds it took to establish a connection to the port |
[Memory]
| Name |
Type |
Description |
| utilization |
output |
Memory utilization (virtual memory) |
| total |
output |
Total (physical) memory in K |
| available |
output |
Available (physical) memory in K |
[NetworkEnvironment]
This test provides Internet Connectivity Diagnostics such as Local IP, External IP, Gateway, DNS and Web Access.
| Name |
Type |
Description |
| DisplayName |
output |
Network Name |
| internalips |
output |
Displays your internal IP's |
| externalips |
output |
Displays your external IP's |
| dnsips |
output |
Displays your DNS IP's |
| gatewayip |
output |
Displays your Gateway IP |
| internalhostname |
output |
Displays your Internal Host Name |
| externalhostname |
output |
Displays your External Host Name |
| gatewaymodel |
output |
Displays your Gateway model |
| gatewaydesc |
output |
Displays a description of your gateway |
[Processor]
| Name |
Type |
Description |
| architecture |
output |
Should always be "Intel" |
| vendor |
output |
Vendor string as reported by the CPU itself (eg: GenuineIntel) |
| type |
output |
Windows value (may be inaccurate) |
| number |
output |
Number of CPU's |
| level |
output |
Processor level as reported by Windows |
| revision |
output |
Processor revision info as reported by Windows |
| power |
output |
The power rating of the CPU, by performing a simple benchmark |
| mhz |
output |
Calculated CPU speed in Mhz |
[Registry Key]
| Name |
Type |
Description |
| key |
input |
The registry key you wish to test (search) for |
| val |
output |
The value of the registry key |
[User]
| Name |
Type |
Description |
| name |
output |
The user name of the user signed onto Windows |
| region |
output |
The world region of the computer |
| language |
output |
The language configured on the computer |
| timezone |
output |
The timezone configured on the computer |
| administrator |
output |
"yes" | "no" | "na" |
[User Form]
| Name |
Type |
Description |
dialogtitle |
input |
specifies the text in the title bar of the dialog |
| dialogprompt |
input |
specifies the text in the first line of the dialog |
| In each of the below, the 'X' in varX is a number. The dialog supports requesting up to 64 different inputs from the end user. The first is described by var1, the second by var2, etc. |
| varX.name |
input |
the variable name which appears in the DesktopAnalyzer list. |
| varX.prompt |
input |
the text to place next to the input box, describing what the user should type there. |
| varX.len |
input |
the size (in characters) of the input box |
| varX.allowblank |
input |
'yes' or 'no', whether to allow the user to leave that field blank |
[WebDownload]
| Name |
Type |
Description |
| url |
input |
A full URL (http or https) to a web resource (html/gif/jpg/etc) |
| zone |
output |
The Internet Security zone of the URL: "Computer" | "Intranet" | "Trusted" | "Internet" | "Restricted" | "Unknown" |
| bytes |
output |
Number of bytes read from the URL |
| ms |
output |
Number of milliseconds it took to read the resource |
| throughput |
output |
Calculated throughput in K |
[WebUpload]
| Name |
Type |
Description |
url |
input |
URL of a (preferably small) file on the HTTP server |
uploadthroughput |
output |
Upload speed in bits per second |
bytesuploaded |
output |
Number of bytes uploaded |
mstime |
output |
Number of seconds taken to upload the above |
[Windows]
| Name |
Type |
Description |
| name |
output |
OS name |
| version |
output |
OS "major.minor" version |
| detail |
output |
Gives a full description of the Windows version, including Vista / XP edition name |
| build |
output |
OS build number |
| pack |
output |
OS service pack "major.minor" version (0.0 if none installed) |
| verpack |
output |
Combination of version and pack in a single version number |
| nt |
output |
Is NT (NT/2000/XP): "yes" | "no" |
| windir |
output |
The Windows directory path name |
| winsysdir |
output |
The Windows system directory path name |
Configuring Output and Input Parameters 
Every output parameter from an individual script test can have a constraint expression written for it, and have a custom error message defined. Expressions and messages are defined as new variables within a script section as follows:
param.warn = expression
param.err = expression
param.warn.msg = message
param.err.msg = message
If both a ".warn" and a ".err" expression are defined for a particular param, the 'most severe' error status (that evaluates to 'true') is used as the status for a particular param.
All tests allow for the following input parameters to be set:
| Name |
Type |
Description |
| DisplayName |
input |
The end-user visible name for a test/section. If not specified, the section name is used. |
| msg.ok |
input |
The message to display if the entire test status is 'OK' |
| msg.warn |
input |
The message to display if the entire test status is 'warning' |
| msg.err |
input |
The message to display if the entire test status is 'error' |
Any output or input message defined within a test allows for very simple variable substitution by enclosing a param name within dollar signs ($param name$). For example:
zone.err.msg = $url$ must be in the 'Internet' zone
An example demonstrating both output and input parameter options and message variable substitution is shown below:
[Windows]
DisplayName = Windows Version
version.warn = <5.0
version.warn.msg = Think about upgrading to Windows NT
version.err = <4.10
version.err.msg = Windows 98 or later is required
msg.ok = Everything is OK. Your version is $version$.
msg.err = Please upgrade your version of Windows
msg.warn = WARNING: You may have trouble running some applications
Creating Validation Expressions 
Expressions within Desktop Analyzer are not a full expression language, but rather a constraint expression language. If the expression evaluates to "true", then the "warn" (for a '.warn' param) or "err" (for a '.err' param) condition is set.
Expressions are evaluated from left to right, but parenthesis can be used to regroup evaluation order. Expressions always operate on the implied param, which is not specified in each expression. This results in expressions which look like:
version.err = <5.00.3805
name.warn = +"1997"
name.err = not(+"1997" || +"1998" || +"2000" || +"2002" || +"XP")
The operators in the expression language are:
| Operator |
Description |
Types |
| < |
less than |
number, version |
| <= |
less than or equals |
number, version |
| > |
greater than |
number, version |
| >= |
greater than or equals |
number, version |
| == |
equals |
number, version |
| != |
does not equal |
number, version |
| + |
includes |
string |
| - |
does not include |
string |
The functions that can be used in the expression language are:
| Function |
Description |
| not(bIn) |
false if bIn==true; true if bIn==false |
An example of the use of expressions is shown below:
[Application]
DisplayName = Test for Microsoft Office
find = winword.exe
name.warn = +"1997"
name.warn.msg = Office 1997 does not allow for seemless editing
name.err = not(+"1997" || +"1998" || +"2000" || +"2002" || +"XP")
version.err = <9.0
[Application]
DisplayName = Test for Microsoft Java VM
find = jview.exe
version.err = ==5.00.3809
version.err.msg = Security issues with current version, upgrade Java VM
msg.warn = WARNING: Upgrade your Java VM
msg.err = ERROR: Upgrade your Java VM
Signing and Testing Scripts 
Licensed users of DesktopAnalyzer will receive a license key from Visualware that should be saved to the file key.txt. This file, in addition to the script.txt file created in the steps above, are used to sign a new executable EXE file.
When DesktopAnalyzer.exe is run, it requires a valid license key and a script file to be signed to the executable. This process allows the user to manufacture predefined and configured DesktopAnalyzer executables for deployment or posting to a support website. The DesktopAnalyzer program will search for a valid script file as follows:
- The first script.txt that has been signed to the EXE
- A script.txt that is in the same folder as the EXE
- The default script.txt
This allows you to quickly and easily test and debug scripts before having to sign a script to an EXE. Once you are happy with a script, sign the script to the EXE by running sign.bat file located in the DesktopAnalyzer program directory, or using the following command line:
vsign2 desktopanalyzer.exe script.txt key.txt
The output of the above syntax is a unique EXE file called signed.exe. This file can/should then be renamed prior to posting to a Website or distributing to the end user community.
DesktopAnalyzer Agent Deployment 
The output file (signed.exe) created in Section 7 above is typically deployed to the end user community via email or posted to a Website for on-demand usage. It is recommended that this file be renamed prior to deployment as multiple EXE files can be created to perform specific configuration testing.
For web deployment, simply create a link on your web page that points to the Agent executable. An example
page on how to configure web-based access to the executable is provided with the DesktopAnalyzer Release. To view the example, click on Start --> All Programs
--> DesktopAnalyzer --> DesktopAnalyzer, and a sample page similar to the one below will be displayed.

End User Reporting 
he validation tests performed by DesktopAnalyzer may encompass general configuration issues such as hardware and software components as well as external service availability and performance such as connectivity issues as specified in the script.txt file used to sign the EXE.
When the end user opens the EXE file, DesktopAnalyzer launches a window on the end user desktop like the one shown below and completes its validation. At a glance, DesktopAnalyzer provides a visual indication as to whether the end user's desktop environment meets the requirements configured in the script file.

If the showdetail input parameter is configured, the end user will be able to select the "Show detail" check box. When checked, the DesktopAnalyzer output expands to provide specifics about the results of each [selection] test as shown in the figure below.

Clicking on the HTML Report... button produces an HTML report that can then be saved or emailed (if the email input parameter is configured) to the helpdesk or support contact supplied in the report. A detailed IP Configuration report is included at the bottom of the HTML report if specified using the ipconfig input parameter.
Also a screenshot of the desktop environment when DesktopAnalyzer was run is taken and is shown at the end of the HTML report.

|