summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiep Kroonenberg <siepo@cybercomm.nl>2008-04-19 11:09:05 +0000
committerSiep Kroonenberg <siepo@cybercomm.nl>2008-04-19 11:09:05 +0000
commit6436b7491107c65c9d97992c1dd988cd3d142467 (patch)
treecac85fbced8c7e1533f9d7e95f701b1093c11528
parent00317d26788c36e16f835c3cfb51a8765bcb70e3 (diff)
Win32 uninstall via add/remove programs now mostly works.
git-svn-id: svn://tug.org/texlive/trunk@7516 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xMaster/install-tl6
-rwxr-xr-xMaster/install-tl.bat2
-rwxr-xr-xMaster/texmf/scripts/texlive/uninstall-tl.pl1
-rw-r--r--Master/tlpkg/TeXLive/TLWinGoo.pm70
4 files changed, 66 insertions, 13 deletions
diff --git a/Master/install-tl b/Master/install-tl
index 83973e7d867..c977ba387d8 100755
--- a/Master/install-tl
+++ b/Master/install-tl
@@ -43,7 +43,7 @@ BEGIN {
}
use TeXLive::TLUtils qw(initialize_installer media platform platform_desc
- which getenv win32 unix program_exists
+ which getenv win32 unix program_exists
get_system_tmpdir member
mkdirhier make_var_skeleton make_local_skeleton install_package copy
install_packages dirname tllog setup_programs);
@@ -75,7 +75,7 @@ if (win32) {
&unregister_script_type
&broadcast_env
&update_assocs
- &register_uninstaller
+ &create_uninstaller
));
}
use Getopt::Long;
@@ -422,6 +422,7 @@ sub do_installation {
do_install_packages();
if (win32()) {
do_win_registry_magic();
+ create_uninstaller($vars{'TEXDIR'});
}
foreach my $h (@::start_postinst_hook) {
&$h();
@@ -1034,7 +1035,6 @@ sub do_win_registry_magic {
register_script_type(".texlua", "%TEXBINDIR%/texlua.exe");
broadcast_env();
update_assocs();
- register_uninstaller("$vars{'TEXDIR'}") unless $opt_portable;
}
#
diff --git a/Master/install-tl.bat b/Master/install-tl.bat
index cec4dfe80af..70be6c0aab2 100755
--- a/Master/install-tl.bat
+++ b/Master/install-tl.bat
@@ -18,7 +18,7 @@ set PERL5SAVE=%PERL5LIB%
set PERL5LIB=%tlroot%tlpkg\installer\perllib
rem "%tlroot%tlpkg\installer\perl" "%tlroot%install-tl.pl" %*
-"%tlroot%tlpkg\installer\perl" "%~dpn0.pl" %*
+"%tlroot%tlpkg\installer\perl" "%~dpn0" %*
rem pause Done
rem cleanup in case of start from command-line
diff --git a/Master/texmf/scripts/texlive/uninstall-tl.pl b/Master/texmf/scripts/texlive/uninstall-tl.pl
index dc45c567607..d70a0b824fd 100755
--- a/Master/texmf/scripts/texlive/uninstall-tl.pl
+++ b/Master/texmf/scripts/texlive/uninstall-tl.pl
@@ -60,6 +60,7 @@ sub main
remove_texbindirs_from_path();
unsetenv_reg("TEXBINDIR");
unregister_script_type(".texlua");
+ unregister_uninstaller();
broadcast_env();
update_assocs();
} else {
diff --git a/Master/tlpkg/TeXLive/TLWinGoo.pm b/Master/tlpkg/TeXLive/TLWinGoo.pm
index 01b23d3fac8..b7fe88f0831 100644
--- a/Master/tlpkg/TeXLive/TLWinGoo.pm
+++ b/Master/tlpkg/TeXLive/TLWinGoo.pm
@@ -47,7 +47,8 @@ C<TeXLive::TLWinGoo> -- Additional utilities for Windows
TeXLive::TLWinGoo::remove_texbindirs_from_path;
TeXLive::TLWinGoo::register_script_type($extension, $command);
TeXLive::TLWinGoo::unregister_script_type($extension);
- TeXLive::TLWinGoo::register_uninstaller;
+ TeXLive::TLWinGoo::create_uninstaller;
+ TeXLive::TLWinGoo::unregister_uninstaller;
=head2 ACTIVATING CHANGES IMMEDIATELY
@@ -86,7 +87,8 @@ BEGIN {
&unregister_script_type
&broadcast_env
&update_assocs
- &register_uninstaller
+ &create_uninstaller
+ &unregister_uninstaller
);
# for testing also:
@EXPORT_OK = qw(
@@ -605,6 +607,7 @@ sub reg_delete_recurse {
tllog ($::LOG_DDDEBUG, "Deleting $childname regkey\n");
if ($childname !~ '^/') { # subkey
my $child = $parent->Open ($childname, {Access => KEY_ALL_ACCESS()});
+ return unless $child;
foreach my $v (keys %$child) {
if ($v =~ '^/') { # value
delete $child->{$v};
@@ -834,25 +837,74 @@ sub update_assocs() {
=pod
-=item C<register_uninstaller>
+=item C<create_uninstaller>
Writes registry entries for add/remove programs which reference
-the uninstaller script.
+the uninstaller script and creates uninstaller batchfiles to finish
+the job.
=cut
-sub register_uninstaller {
- my $td = shift;
+sub create_uninstaller {
+ my $tdfw = shift;
+ my $td = $tdfw;
+ $td =~ s!/!\\!g;
+
my $uninst_key = $Registry -> Open((admin() ? "LMachine" : "CUser") .
"/software/microsoft/windows/currentversion/uninstall/",
{Access => KEY_ALL_ACCESS()});
my $k = $uninst_key->CreateKey("TeXLive/");
- $td =~ s!/!\\!g;
$k->{"/DisplayName"} = "TeXLive ".$::texlive_release;
- $k->{"/UninstallString"} =
- "\"$td\\texmf\\scripts\\texlive\\tlmgr\" uninstall & del /q /s \"$td*.*\"";
+ $k->{"/UninstallString"} = "\"$td\\tlpkg\\installer\\uninst.bat\"";
$k->{'/DisplayVersion'} = $::texlive_release;
$k->{'/URLInfoAbout'} = "http://www.tug.org/texlive";
+
+ open UNINST, ">$tdfw/tlpkg/installer/uninst.bat";
+ print UNINST <<UNEND;
+set PERL5LIB=
+\"$td\\tlpkg\\tlperl\\bin\\perl.exe\" \"$td\\texmf\\scripts\\texlive\\uninstall-tl.pl\"
+copy \"$td\\tlpkg\\installer\\uninst2.bat\" \"\%TEMP\%\"
+\"\%TEMP\%\\uninst2.bat\"
+UNEND
+close UNEND;
+
+ open UNINST2, ">$tdfw/tlpkg/installer/uninst2.bat";
+ print UNINST2 <<UNEND2;
+rmdir /s /q \"$td\\texmf-dist\"
+rmdir /s /q \"$td\\texmf-doc\"
+rmdir /s /q \"$td\\texmf-var\"
+rmdir /s /q \"$td\\texmf-config\"
+rmdir /s /q \"$td\\texmf\"
+rmdir /s /q \"$td\\tlpkg\"
+rmdir /s /q \"$td\\temp\"
+rmdir /s /q \"$td\\bin\"
+del \"$td\\install-tl.log\"
+del %0
+UNEND2
+ close UNINST2;
+}
+
+=pod
+
+=item C<unregister_uninstaller>
+
+Removes TeXLive from Add/Remove Programs.
+
+=cut
+
+sub unregister_uninstaller {
+ my $regkey_uninst;
+ print "trying HKCU uninstaller entry\n";
+ $regkey_uninst = $Registry->Open(
+ "CUser/software/microsoft/windows/uninstall/",
+ {Access => KEY_ALL_ACCESS()});
+ reg_delete_recurse($regkey_uninst, 'texlive') if $regkey_uninst;
+ return unless admin();
+ print "trying HKLM uninstaller entry\n";
+ $regkey_uninst = $Registry->Open(
+ "LMachine/software/microsoft/windows/uninstall/",
+ {Access => KEY_ALL_ACCESS()});
+ reg_delete_recurse($regkey_uninst, 'texlive') if $regkey_uninst;
}
=pod