This commit is contained in:
commit
47aee91ef4
396 changed files with 32003 additions and 0 deletions
211
tools/Perl/bin/uninstall.pl
Normal file
211
tools/Perl/bin/uninstall.pl
Normal file
|
@ -0,0 +1,211 @@
|
|||
#
|
||||
# Uninstall.pl
|
||||
#
|
||||
# Author: Michael Smith (mikes@ActiveState.com)
|
||||
#
|
||||
# Copyright © 1998 ActiveState Tool Corp., all rights reserved.
|
||||
#
|
||||
###########################################################
|
||||
|
||||
use Win32::Registry;
|
||||
use File::Find;
|
||||
use MetabaseConfig;
|
||||
|
||||
my $data_file = $ARGV[0];
|
||||
my $ENVIRONMENT_KEY = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
|
||||
|
||||
ReadData();
|
||||
Warn();
|
||||
UninstallDependents();
|
||||
CleanPath();
|
||||
RemoveIISVirtDirs();
|
||||
RemoveIISScriptMaps();
|
||||
RemoveLinesFromFiles();
|
||||
RemoveDirectories();
|
||||
RemoveFiles();
|
||||
CallInstallShield();
|
||||
sleep(3);
|
||||
exit(0);
|
||||
|
||||
sub ReadData {
|
||||
print "Reading uninstall data...\n";
|
||||
my $data = '';
|
||||
$rv = open(DATA, "<$data_file");
|
||||
if($rv) {
|
||||
map($data .= $_, <DATA>);
|
||||
close(DATA);
|
||||
eval($data);
|
||||
}else{
|
||||
die "Error reading uninstallation data file. Aborting!!";
|
||||
}
|
||||
}
|
||||
|
||||
sub Warn {
|
||||
print "This will uninstall $app_name. Do you wish to continue?\n";
|
||||
print "[y|N] ==>";
|
||||
my $response = '';
|
||||
while(($response = <STDIN>) !~ /^[\nyn]/i){};
|
||||
if($response !~ /^y/i) {
|
||||
print "Aborting $app_name uninstallation!\n";
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
sub UninstallDependents {
|
||||
my $RegObj = 0;
|
||||
my $UninstallString = '';
|
||||
my $type = 0;
|
||||
my $rv = 0;
|
||||
|
||||
foreach $dependent (@$dependents) {
|
||||
print "$dependent is dependent on $app_name\n" .
|
||||
"and will not function correctly without it.\n" .
|
||||
"Would you like to uninstall $dependent?\n" .
|
||||
"[y|n] ==>";
|
||||
while(($response = <STDIN>) !~ /[yn]/i){};
|
||||
|
||||
if($response =~ /y/i) {
|
||||
$rv = $HKEY_LOCAL_MACHINE->Open("software\\microsoft\\windows\\currentversion\\uninstall\\$dependent", $RegObj);
|
||||
if($rv) {
|
||||
$rv = $RegObj->QueryValueEx("UninstallString", $type, $UninstallString);
|
||||
if($rv) {
|
||||
$RegObj->Close();
|
||||
print $UninstallString;
|
||||
print "Uninstalling $dependent...\n";
|
||||
$rv = (system($UninstallString) ? 0 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
if(!$rv) {
|
||||
print "Error uninstalling $dependent!\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub CleanPath {
|
||||
if(@$path_info) {
|
||||
print "Cleaning PATH...\n";
|
||||
my $path = '';
|
||||
if(Win32::IsWinNT) {
|
||||
my $Environment = 0;
|
||||
if($HKEY_LOCAL_MACHINE->Open($ENVIRONMENT_KEY, $Environment)) {
|
||||
if($Environment->QueryValueEx("PATH", $type, $path)) {
|
||||
for $dir (@$path_info) {
|
||||
$dir =~ s/\\/\\\\/g;
|
||||
$path =~ s/$dir;?//ig;
|
||||
}
|
||||
$Environment->SetValueEx("PATH", -1, $type, $path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
my $file = "$ENV{'SystemDrive'}/autoexec.bat";
|
||||
if(open(FILE, "<$file")) {
|
||||
my @statements = <FILE>;
|
||||
close(FILE);
|
||||
my $path = '';
|
||||
for $statement (@statements) {
|
||||
if($statement =~ /\s+path\s?=/i) {
|
||||
$path = $statement;
|
||||
for $dir (@$path_info) {
|
||||
$dir =~ s/\\/\\\\/g;
|
||||
$path =~ s/$dir;?//ig;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(open(FILE, ">$file")) {
|
||||
print FILE @statements;
|
||||
close(FILE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveIISVirtDirs {
|
||||
if(@$iis_virt_dir) {
|
||||
print "Removing IIS4 virtual directories...\n";
|
||||
for $virt_dir (@$iis_virt_dir) {
|
||||
$rv = MetabaseConfig::DeleteVirDir(1, $virt_dir);
|
||||
if($rv =~ /^Error/i){
|
||||
print "$rv\n";
|
||||
system('pause');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveIISScriptMaps {
|
||||
if(keys %$iis_script_map) {
|
||||
print "Removing IIS4 script maps...\n";
|
||||
my $virt_dir = '';
|
||||
for $key (keys %$iis_script_map) {
|
||||
print "Virtual Directory ==> $key\n";
|
||||
for $script_map (@{$iis_script_map->{$key}}) {
|
||||
print "\t$key ==> $script_map\n";
|
||||
$virt_dir = $key;
|
||||
$virt_dir = ($virt_dir eq '.' ? '' : $virt_dir);
|
||||
$rv = MetabaseConfig::RemoveFileExtMapping(1, $virt_dir, $script_map);
|
||||
if($rv =~ /^Error/i){
|
||||
print "$rv\n";
|
||||
system('pause');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveLinesFromFiles {
|
||||
my $file;
|
||||
|
||||
foreach $file (keys %$lines_in_file) {
|
||||
open(FILE, "<$file") or next;
|
||||
my @lines = <FILE>;
|
||||
close(FILE);
|
||||
open(FILE, ">$file") or next;
|
||||
LINE: foreach $line (@lines) {
|
||||
chomp $line;
|
||||
for ($offset = 0; $offset <= $#{$$lines_in_file{$file}}; $offset++) {
|
||||
if ($line eq $$lines_in_file{$file}[$offset]) {
|
||||
splice(@{$$lines_in_file{$file}}, $offset, 1);
|
||||
next LINE;
|
||||
}
|
||||
}
|
||||
print FILE "$line\n";
|
||||
}
|
||||
close(FILE);
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveDirectories {
|
||||
if(@$directory) {
|
||||
print "Removing directories...\n";
|
||||
for $dir (@$directory) {
|
||||
finddepth(\&DeleteFiles, $dir);
|
||||
rmdir($dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveFiles {
|
||||
if(@$file) {
|
||||
print "Removing files...\n";
|
||||
for $file (@$file) {
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub CallInstallShield {
|
||||
print "Calling InstallShield...\n";
|
||||
system("start $is_uninstall_string");
|
||||
}
|
||||
|
||||
sub DeleteFiles {
|
||||
if(-d $File::Find::name) {
|
||||
rmdir("$File::Find::name");
|
||||
} else {
|
||||
unlink("$File::Find::name");
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue