Jump to content

WPI 7.0 + Wishlist


Recommended Posts

Some Ideas:

And two new Buttons "First" and "Last" to go quickly to the first or last page.

Maybe a combo (or another way) to go quickly to a category would be enough

A hint selected/app_count on each category would also be very nice.

The same hint should be displayed during install (current_app/apps_to_install) maybe instead of the percentage.

Also the time (the difference from "start install" to now) would be interessting.

--> instead of 10% the progress should be displayed like 5/50 5:28min

Haven't tried it yet but is it possible to scroll up during install to the first entry?

--> e.g. to check if all apps were installed correctly during install. Maybe also a scroll-lock would be needed.

Al

Edited by AlBundy33
Link to comment
Share on other sites


Maybe you want to add an option to clear Temp-files.

Al

This script tries to delete all temp-files and ignores files that can not be deleted.

clearTemp.cmd

@ECHO OFF

CALL :CLEAN_DIR "%TEMP%"
CALL :CLEAN_DIR "%TEMP%\..\Temporary Internet Files"
CALL :CLEAN_DIR "%WINDIR%\Temp"
CALL :CLEAN_DIR "%USERPROFILE%\Recent"
CALL :CLEAN_DIR "%USERPROFILE%\Cookies"

GOTO :EOF

:CLEAN_DIR
IF "%~1"=="" (
ECHO Kein Parameter angegeben.
GOTO :EOF
)
IF NOT EXIST "%~1\" (
ECHO Verzeichnis "%~1" existiert nicht
GOTO :EOF
)
DEL /S /Q "%~1\*.*"
FOR /F "tokens=*" %%D IN ('DIR "%~1\" /A:D /B') DO RD /S /Q "%~1\%%~D"
GOTO :EOF

Link to comment
Share on other sites

Things are really moving along! v7 is still bigger & better!

Now that the wmi calls to determine OS type, version, etc can be used to determine different files for different conditions, i notice that there is now a need to have multiple conditions statements & greyed conditions;

Right now i believe you have the 1 conditional statement and 1 greyed condition that resolves to a true/false and displays the line accordingly. It would also be necessary to have a conditional priority where condition1 is applied first condition2, etc.

it might be good to have a dropdown box with some choices based on the conditions, such as choice1=Hide installer, choice2=Display in colour1, choice3 Diplay in colour2

Also i wanted to know can you perform operations sunch as AND LIKE OR operators like in wmi? for the conditional statements, ie [getOSver==xp" AND getOSlang=='"ENU] to get an english XP system?

Update - i just tried some basic operators (AND, OR) in the greyed out condition box and i just got errors, i'm not very good with wmi calls but i know that you can do logical operator calls such as the example above. Do you think its possible to build that into the next release where you can do a greyout or conditional statement based on 1 or more conditions?

Also in the changelog you mention that the function isInstalled doesn't work on 2003, is that just because wmi is turned off by default? if it was turned on would it work?

thanks again for all the work

Still fooling around with it; maybe some more ideas

The isInstalled functions is very nice to determine the software installed, but it does have a few drawbacks

1) - its slow - maybe consider using a scan button, if someone wants to test if software is installed then they can leave it auto-on/off or manual scan, that way it wont slow it down unnecessarily

2) - i think its picking up the Caption title which is the one that appears in the Add/Remove list however it doesn't always give the version, i forget if or what the handle is but i think there is one that gives the exact version because something like Adobe Flash appears in the add/remove as adobe flash activex - no version #. this might be problematic since it seems you might need some way of doing an iteration, i'm not sure

There is scriptomatic from microsoft and an autoit version that is really good for looking at the wmi handles available

-also for wmi - i got burned on this recently to find that some handles are not available on all versions of windows, some like caption are universal but i was using one on vista that i tried on XP and it wasn't available. so just a caution

Edited by TwoJ
Link to comment
Share on other sites

Thanks, TwoJ.

I will try to write some examples for the manual on conditions. Very few people read it, but.........

FileExists() - Does file exist? yes/no

!FileExists() - Does the file NOT exist?

getOSlang()=="ENU" && getOSVer() != "Vista - lang is english and OS not Vista

getOSlang()=="ENU" || getOSVer() != "Vista - lang is english or OS not Vista

(getOSlang()=="ENU" && getOSVer() != "Vista) || getFreeRAM()>512 - lang is english and OS not Vista, or more than 512MB free RAM

That will get you started. Find more online search.

Link to comment
Share on other sites

A friend of mine helped me improve my WPI (v6.5) by adding the following: I'd love to see these features included in the source of future releases. Code follows below.

1. Added GetFirewallProduct() and GetAntivirusProduct() methods. (registry_dos.js)

2. Fixed the code for getting the optical drive letter in defaultWPI(). Now defaults to using WMI, and reverts to the old way if WMI is not present. (core.js)

3. Modified getOSver() to use WMI, and to cache the result since this function is called VERY often. (registry_dos.js, globals.js)

4. Cached the result of getSPver() as well. (registry_dos.js, rev 19; globals.js)

5. Added WMI constants to globals.js. (globals.js)

6. Added GetFirewallProduct() and GetAntivirusProduct() methods to condition dropdown boxes. (configwizardtemplate_config.htm)

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
core.js - new defaultWPI function
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Set some specific environment variables for WPI
function defaultWPI()
{
position="core.js";
whatfunc="defaultWPI()";

// %wpipath%
wpipath = unescape(document.location);
wpipath = wpipath.substring(0,wpipath.lastIndexOf("/"));
wpipath = wpipath.replace("file:///","").replace(/\//g,"\\"); [^]


// Universal Silent Switch Finder
USSFcmd=wpipath+"\\Tools\\USSF.exe";


// %root%
root=fso.GetParentFolderName(wpipath);


// %dospath%
if (FileExists(sysdir + "$winnt$.inf"))
{
var winntinf=fso.OpenTextFile(sysdir + "$winnt$.inf", 1); // It's recorded in the 'dospath' directive of the [data] section of \system32\$winnt$.inf.
var matches = winntinf.ReadAll().match(/\ndospath=(.*)/i);
winntinf.Close();
if (matches)
{
dospath=matches[1];
if (dospath.substring(dospath.length - 2, dospath.length - 1)=="\\")//dospath may have a trailing slash ... or not (depending on the location)
dospath = dospath.substring(0, dospath.length - 2); // So let's remove it if it's there
}
}
// FYI: x64 stores this file in system32 but since the app that runs your script (mshta.exe) is only 32-bit it references SysWOW64 instead of system32


// %HDD%
var a, i, li = new Array();

hdd="";
if (i=wpipath.indexOf(":") != -1 && !ResumeInstall)
{
var temp;

temp=wpipath.substr(0,2);
a=DriveType(temp);

if (a !="UNKNOWN" && a !="CDROM") // Not UNKNOWN and not CDROM
hdd=temp;
else
hdd="";
}


// %CDROM%
// First try getting the CD Drive letter from WMI...
try
{
var objWMIService = GetObject("winmgmts:\\\\" + "." + "\\root\\cimv2");
var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=5", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);

var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext())
{
var objItem = enumItems.item();
cddrv = objItem.DeviceID + "\\";
break;
}
}
catch (ex) // if WMI doesn't work, then revert to the old way
{ // NOTE: THIS METHOD DOES NOT WORK WITH VISTA
li = GetDriveLetters(4);
for (i=0; i<li.length; i++)
{
if (FileExists(li[i]+'\\WPI.HTA') || FileExists(li[i]+'\\WIN51') || FileExists(li[i]+'\\I386\\DRIVER.CAB') || FileExists(li[i]+'\\Sources\\install.wim'))
cddrv = li[i];
}

if (cddrv=="")
{
a = fso.GetAbsolutePathName(".");
while (a.length>=3)
{
if (FileExists(a+'\\WPI.HTA'))
{
cddrv=a;
break;
}
if (a.length==3)
break;
a = a + "\\..";
a = fso.GetAbsolutePathName(a);
}
}

if (cddrv=="")
{
try
{
// this registry value may not exist, and will throw an exception in that case
cddrv = WshShell.RegRead("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Setup\\SourcePath") + "\\";
cddrv = cddrv.substr(0,3);
}
catch (ex)
{
;
}
}
}

// %OSLANG%
var sLang = '', Enum, DtoH;

CreateLocalArray();

// OSLanguage = 1033, 1036, ....
var OSProps = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem");

// Language ID in Dec
sLang = new Enumerator(OSProps).item();
Enum = sLang.OSLanguage;
DtoH = DecToHex(Enum);
while (DtoH.length<4)
DtoH = "0" + DtoH+"";

for (var x=0; x<arrOSLang.length; x++)
{
if (arrOSLang[x].LCID == DtoH)
{
oslang=arrOSLang[x].TLA;
break;
}
}
}

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
globals.js - added to end of file
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// WMI constants
var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

// registry_dos.js
var NOT_FOUND = "Not found";
var szOSVerCache = NOT_FOUND;
var szServicePackCache = NOT_FOUND;

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
registry_dos.js - new getOSver() and getSPver()
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
function getOSver()
{
position="registry_dos.js";
whatfunc="getOSver()";

if ( szOSVerCache == NOT_FOUND ) // this function is called often - get it once and cache the result
{
var ver = "";
try // try using WMI first...
{
var objWMIService = GetObject("winmgmts:\\\\" + arrComputers[i] + "\\root\\CIMV2");
var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);

var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext())
{
var objItem = enumItems.item();
ver = objItem.Caption;
if (ver.indexOf("Vista") >= 0) szOSVerCache = "Vista";
if (ver.indexOf("Server 2003") >= 0) szOSVerCache = "03";
if (ver.indexOf("XP") >= 0) szOSVerCache = "XP";
if (ver.indexOf("2000") >= 0) szOSVerCache = "2K";
// WMI is not likely to be installed on older OS's - if WMI is not present, then we revert to the old code...
}
}
catch (ex) // if WMI doesn't work, try checking the registry directly
{
try
{
ver=WshShell.RegRead("HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion");
}
catch (ex1)
{
try
{
ver=WshShell.RegRead("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Version");
}
catch (ex2)
{ ; }
}
if (ver=="6.0")
szOSVerCache ="Vista";
if (ver=="5.2")
szOSVerCache ="03";
if (ver=="5.1")
szOSVerCache ="XP";
if (ver=="5.0")
szOSVerCache ="2K";
if (ver=="4.0")
szOSVerCache ="NT";
if (ver=="Windows 98")
szOSVerCache ="98";
if (ver=="Windows Millennium Edition")
szOSVerCache ="ME";
if (ver=="Windows 95")
szOSVerCache = "95";
}

}

return szOSVerCache;
}


function getSPver()
{
position="registry_dos.js";
whatfunc="getSPver()";

if ( szServicePackCache == NOT_FOUND )
{
var sp = "";
try
{
sp=WshShell.RegRead("HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\CSDVersion");
}
catch (ex)
{ ; }

if (sp != "")
{
szServicePackCache = sp.substr(sp.length-1,1);
}
}

return szServicePackCache;
}


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
registry_dos.js - newly added firewall and antivirus methods
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//=============================================================================
// Firewall and AntiVirus methods
//
// These functions use WMI to check what products are registered with the
// Windows Security Center. It is possible that a Firewall or AntiVirus product
// is installed, but is not registered with the Windows Security Center
// (particularly with older legacy applications).
//
// These methods are not likely to be called often, so probably no need to cache.
//

function getFirewallProduct()
{
position="registry_dos.js";
whatfunc="getFirewallProduct()";

var FirewallProductName="";

try
{
var objWMIService = GetObject("winmgmts:\\\\" + "." + "\\root\\SecurityCenter");
var colItems = objWMIService.ExecQuery("SELECT * FROM FirewallProduct", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);

var i = 0;
var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext())
{
i = i + 1;
var objItem = enumItems.item();
FirewallProductName = objItem.displayName;
break; // just get the first one and return
}

}
catch (ex)
{
// window.alert("getFirewallProduct - EXCEPTION CAUGHT!"); // for testing purposes
;
}

return FirewallProductName;
}


function getAntiVirusProduct()
{
position="registry_dos.js";
whatfunc="getAntiVirusProduct()";

var AVProduct="";

try
{
var objWMIService = GetObject("winmgmts:\\\\" + "." + "\\root\\SecurityCenter");
var colItems = objWMIService.ExecQuery("SELECT * FROM AntiVirusProduct", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);

var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext())
{
var objItem = enumItems.item();
AVProduct = objItem.displayName;
}

}
catch (ex)
{
// window.alert("getAntiVirusProduct - EXCEPTION CAUGHT!"); // for testing purposes
;
}

return AVProduct;
}

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
configwizardtemplate_config.htm -
added following to both cboConditions1 and cboConditions2
sections for dropdown boxes.
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

<optgroup label="Security">
<option value="getAntiVirusProduct()">getAntiVirusProduct()</option>
<option value="getFirewallProduct()">getFirewallProduct()</option>
</optgroup>

Link to comment
Share on other sites

Here are some ideas that i think might expand some of wpi functionality

1) have some sort of export/import function, a lot of the applications i put on wpi are freeware stuff, that i think might be good if there was a central repository that people could just download the latest vesions and import into wpi. also if they could include conditions such as for x86 or x64 versions, etc. It doesn't seem very efficient that everyone has to create their own versions when a lot could benefit from one or 2 versions.

2) as i mentioned in another post, i think the conditions need to be beefed up so that their are multiple conditions, such as if condition A then highlight in x colour, if condition B highlight in y colour. this would be good for cases where we are having x86/x64 systems as well as xp/vista, so that for a program like 7zip we could say if x64 and vista then install 7zipx64vista.exe, else x64&XP install 7zipx64XP.exe, etc

3) i like to use wpi for updating software so i know there has been a lot of work done in v7 to start using wpi, but if there was a way to determine the version of applications that are on wpi with the presently installed versions installed on the system and to highlight or select only the updates needed to install in order to bring the software up to date. there are 2 programs that i know, filehippo update checker, and software informer that can scan the software installed and let you know if there are updated versions, but i would like wpi to also install said updates

4) For the logest time i have struggled with getting programs to install the way i want, i know there are the switches to do silent installs, but a lot of times they are installing extra crap (toolbars, shorcuts, settings, etc) that i don't want. What i was thinking was something like an autoit script to launch the install and then read from a settings.ini file for each program to fill in all the possible choices of the normal attended installation, and then any post -install choices such as add/delete icons, shortcuts, etc. This means that all programs would need a settings.ini to match the installers but it would insure that the programs are really getting installed the way you want instead of trying to repack the files yourself, hope that someone else's silent installer does want you want, or do some sort of customized post-install cleanup.

Some ideas for your consideration

thanks

Link to comment
Share on other sites

#1 look at raynvm's site and wincert.net... Theyre are already ALOT of WPI ready addons for integration with the RVMi

#2 Its on mritters todo list

#3 Someone (Why not you?) Would have to compile and mantain a list of well over hundreds of applications and keep it updated daily. It has been discussed in the past and quite frankly we don't get paid enough...

#4 See #3 nearly the same applies.

Link to comment
Share on other sites

TwoJ,

#1) That has been asked for several times. It really come down to who is going to maintain this HUGE databsse of programs? Not me or Kels. Maybe if people would make a donation to keep me happily programming away it might get some consideration. It all comes down to the forum users: ask for anything to be added and I will look into it, but don't expect the impossible from me. If you have server space and some time, talk to me and I will help you get started. I don't get paid for this, that's up to you guys, I have a full time job and a life outside of WPI. I got burned out once and took almost a year off. I am trying to pace myself better this time.

#2) I understand what you are asking for now. For now, no, that will not happen. If you have 2 versions of the same program for x86 and x64, then put a Deps check in for each entry with a getmshtaBits()==64 or getBits()==64 check. Dont use Grey Condition, just the regular so it will be hidden.

#3) The problem with checking for installed programs' version could be tweaked to not just look at the caption...if it has such details. I agree it would be more reliable. The next problem is you can't do a getFileVersion() on an installer and expect to get an accurate reading. I tried. FileHippo has a PAID staff maintaining that database.

#4) Same answer as above: there are only 24 hours in a day........

If you, or anyone else, wants to starts an online database I will be more than happy to write the code to support it. I love the idea, I just don't have the time to maintain it. It will have to be a long-term commitment; you can't drop out without a replacement after 2 months. All or nothing.

Link to comment
Share on other sites

Hi.

I would like to request some improvements in error reporting wherever there is a try{}catch(ex){}.

For example, in WPI_v7.1.1, installer_reboot.js, line 28:

alert(getText(NotOpenRebootFile)+"\n"+rebootFile);

would be better if it would report the exception details as follows:

alert(getText(NotOpenRebootFile)+"\n"+rebootFile + "\nError Number: " + ex.number + "\nError Description: " + ex.description);

Thank you.

Link to comment
Share on other sites

Hi Kel & mritter

Thanks for the repies, and i completly understand, me too, i've got the day job and the wife and other responcibilities which come first before spending time on this. Sometimes i find there are people with more talent and skills than i (which there seems lots of :-) ) and sometimes they seem to lacking ideas or direction for their projects. I on the otherhand seem to have ideas or projects that lack time and/or skills.

At this point there seems a few projects that are in need of development and i understand completly the amount of time some of them would take to create and maintain.

What i was thinking of was a software database that would hold the most recent versions of software, include whether the software works in x86 & x64 mode, whether there exists a X64 version, whether it is freeware/trialware/etc. If anyone knows if something already exist it would be much apprciated to be pointed to that.

fun over - back to work

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...