From a39d7fe0e2b856b7b31c536f095d4dd5e78ddaf8 Mon Sep 17 00:00:00 2001 From: Siep Kroonenberg Date: Thu, 20 Apr 2017 20:20:09 +0000 Subject: Future-proof win version; no uninst reg entry for w10 user install git-svn-id: svn://tug.org/texlive/trunk@43941 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/TeXLive/TLWinGoo.pm | 85 ++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 26 deletions(-) (limited to 'Master/tlpkg/TeXLive') diff --git a/Master/tlpkg/TeXLive/TLWinGoo.pm b/Master/tlpkg/TeXLive/TLWinGoo.pm index e04f01c3cb2..36ae998c70c 100644 --- a/Master/tlpkg/TeXLive/TLWinGoo.pm +++ b/Master/tlpkg/TeXLive/TLWinGoo.pm @@ -34,8 +34,9 @@ C -- Additional utilities for Windows =head2 DIAGNOSTICS - TeXLive::TLWinGoo::win_version; TeXLive::TLWinGoo::is_vista; + TeXLive::TLWinGoo::is_seven; + TeXLive::TLWinGoo::is_ten; TeXLive::TLWinGoo::admin; TeXLive::TLWinGoo::non_admin; TeXLive::TLWinGoo::reg_country; @@ -93,11 +94,12 @@ BEGIN { @ISA = qw( Exporter ); @EXPORT = qw( &is_vista + &is_seven + &is_ten &admin &non_admin ); @EXPORT_OK = qw( - &win_version &admin_again ®_country &broadcast_env @@ -194,23 +196,48 @@ registry: 5.0 for Windows 2000, 5.1 for Windows XP and 6.0 for Vista. =cut my $windows_version = 0; +my $windows_subversion = 0; if ($is_win) { - my @osver = Win32::GetOSVersion(); - $windows_version = $osver[1]; - debug "Windows version $osver[0], major version $osver[1]\n"; + #my @osver = Win32::GetOSVersion(); # deprecated + #$windows_version = $osver[1]; + #debug "Windows version $osver[0], major version $osver[1]\n"; + my $ver = `ver`; + chomp $ver; + $ver =~ s/^[^0-9]*//; + $ver =~ s/[^0-9.]*$//; + ($windows_version = $ver) =~ s/\..*$//; + ($windows_subversion = $ver) =~ s/^[^\.]*\.//; + $windows_subversion =~ s/\..*$//; } -sub win_version { return $windows_version; } - =item C -C returns 1 if win_version is >= 6.0, otherwise 0. +C returns 1 if windows version is >= 6.0, otherwise 0. =cut sub is_vista { return $windows_version >= 6; } +=item C + +C returns 1 if windows version is >= 6.1, otherwise 0. + +=cut + +sub is_seven { + return (($windows_version == 6 && $windows_subversion >= 1) || + ($windows_version > 6)); +} + +=item C + +C returns 1 if windows version is >= 10.0, otherwise 0. + +=cut + +sub is_ten { return $windows_version >= 10; } + # permissions with which we try to access the system environment my $is_admin = 1; @@ -1237,25 +1264,31 @@ UNEND3 "$uninst_dir\\uninst.bat", "", 0); } # register uninstaller - &log("Registering uninstaller\n"); - my $k; - my $uninst_key = $Registry -> Open((admin() ? "LMachine" : "CUser") . - "/software/microsoft/windows/currentversion/", - {Access => KEY_FULL_ACCESS()}); - if ($uninst_key) { - $k = $uninst_key->CreateKey( - "uninstall/TeXLive$::TeXLive::TLConfig::ReleaseYear/"); - if ($k) { - $k->{"/DisplayName"} = "TeX Live $::TeXLive::TLConfig::ReleaseYear"; - $k->{"/UninstallString"} = "\"$td\\tlpkg\\installer\\uninst.bat\""; - $k->{'/DisplayVersion'} = $::TeXLive::TLConfig::ReleaseYear; - $k->{'/URLInfoAbout'} = "http://www.tug.org/texlive"; + # but not for a user install under win10 because then + # it shows up in Settings / Apps / Apps & features, + # where it will trigger an inappropriate UAC prompt + if (admin() || !is_ten()) { + &log("Registering uninstaller\n"); + my $k; + my $uninst_key = $Registry -> Open((admin() ? "LMachine" : "CUser") . + "/software/microsoft/windows/currentversion/", + {Access => KEY_FULL_ACCESS()}); + if ($uninst_key) { + $k = $uninst_key->CreateKey( + "uninstall/TeXLive$::TeXLive::TLConfig::ReleaseYear/"); + if ($k) { + $k->{"/DisplayName"} = "TeX Live $::TeXLive::TLConfig::ReleaseYear"; + $k->{"/UninstallString"} = "\"$td\\tlpkg\\installer\\uninst.bat\""; + $k->{'/DisplayVersion'} = $::TeXLive::TLConfig::ReleaseYear; + $k->{'/Publisher'} = 'TeX Live'; + $k->{'/URLInfoAbout'} = "http://www.tug.org/texlive"; + } + } + if (!$k and admin()) { + tlwarn("Failed to register uninstaller\n". + "You can still run $td\\tlpkg\\installer\\uninst.bat manually.\n"); + return 0; } - } - if (!$k and admin()) { - tlwarn("Failed to register uninstaller\n". - "You can still run $td\\tlpkg\\installer\\uninst.bat manually.\n"); - return 0; } } -- cgit v1.2.3