| Index: visual_studio/NativeClientVSAddIn/InstallerResources/install.py
|
| diff --git a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
|
| index 7ce620a89d70a6c7e96a70ed273e9273a9587753..7cb19a95f090df96bc57e4eb957b90748243d8b6 100644
|
| --- a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
|
| +++ b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
|
| @@ -30,6 +30,10 @@ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
|
| ADDIN_FILES = ['NativeClientVSAddIn.AddIn', 'NativeClientVSAddIn.dll']
|
|
|
| +class InstallError(Exception):
|
| + """Error class for this installer indicating a fatal but expected error."""
|
| + pass
|
| +
|
| def UninstallDirectory(directory):
|
| if os.path.exists(directory):
|
| shutil.rmtree(directory)
|
| @@ -71,8 +75,14 @@ def main():
|
| dest='uninstall', help='Remove the add-in.')
|
| (options, args) = parser.parse_args()
|
|
|
| + print "*************************************************"
|
| + print "Native-Client Visual Studio 2010 Add-in Installer"
|
| + print "*************************************************\n"
|
| + print "Please ensure Visual Studio and MSBuild are closed " \
|
| + "during installation.\n"
|
| +
|
| if platform.system() != 'Windows':
|
| - raise Exception('Must install to Windows system')
|
| + raise InstallError('Must install to Windows system')
|
|
|
| if sys.version_info < (2, 6, 2):
|
| print "\n\nWARNING: Only python version 2.6.2 or greater is supported. " \
|
| @@ -80,15 +90,15 @@ def main():
|
|
|
| # Admin is needed to write to the default platform directory.
|
| if ctypes.windll.shell32.IsUserAnAdmin() != 1:
|
| - raise Exception("Not running as administrator. The install script needs "
|
| - "write access to protected Visual Studio directories.")
|
| + raise InstallError("Not running as administrator. The install script needs "
|
| + "write access to protected Visual Studio directories.")
|
|
|
| # Ensure install directories exist.
|
| if not os.path.exists(options.vsuser_path):
|
| - raise Exception("Could not find user Visual Studio directory: %s" % (
|
| + raise InstallError("Could not find user Visual Studio directory: %s" % (
|
| options.vsuser_path))
|
| if not os.path.exists(options.msbuild_path):
|
| - raise Exception("Could not find MS Build directory: %s" % (
|
| + raise InstallError("Could not find MS Build directory: %s" % (
|
| options.msbuild_path))
|
|
|
| addin_directory = os.path.join(options.vsuser_path, 'Addins')
|
| @@ -104,7 +114,7 @@ def main():
|
| exit(0)
|
|
|
| if not os.path.exists(platform_directory):
|
| - raise Exception("Could not find path: %s" % platform_directory)
|
| + raise InstallError("Could not find path: %s" % platform_directory)
|
| if not os.path.exists(addin_directory):
|
| os.mkdir(addin_directory)
|
|
|
| @@ -112,19 +122,19 @@ def main():
|
| nacl_sdk_root = os.getenv('NACL_SDK_ROOT', None)
|
| chrome_path = os.getenv('CHROME_PATH', None)
|
| if nacl_sdk_root is None:
|
| - raise Exception('Environment Variable NACL_SDK_ROOT is not set')
|
| + raise InstallError('Environment Variable NACL_SDK_ROOT is not set')
|
| if chrome_path is None:
|
| - raise Exception('Environment Variable CHROME_PATH is not set')
|
| + raise InstallError('Environment Variable CHROME_PATH is not set')
|
|
|
| # Remove existing installation.
|
| if os.path.exists(nacl_directory) or os.path.exists(pepper_directory):
|
| # If not forced then ask user permission.
|
| if not options.overwrite:
|
| - print "Warning: Pre-existing add-in installation will be overwritten."
|
| + print "\nWarning: Pre-existing add-in installation will be overwritten."
|
| print "Continue? ((Yes))/((No))"
|
| remove_answer = raw_input().strip()
|
| if not (remove_answer.lower() == "yes" or remove_answer.lower() == "y"):
|
| - raise Exception('User did not allow overwrite of existing install.')
|
| + raise InstallError('User did not allow overwrite of existing install.')
|
| print "Removing existing install..."
|
| Uninstall(nacl_directory, pepper_directory, addin_directory)
|
|
|
| @@ -141,9 +151,9 @@ def main():
|
| options.install_ppapi = True
|
| else:
|
| options.install_ppapi = False
|
| - print "Not installing PPAPI platform."
|
| + print "Will not install PPAPI platform during installation."
|
|
|
| - print "Installing..."
|
| + print "\nBegin installing components..."
|
|
|
| try:
|
| # Copy the necessary files into place.
|
| @@ -165,4 +175,18 @@ def main():
|
| print "\nInstallation complete!\n"
|
|
|
| if __name__ == '__main__':
|
| - main()
|
| + try:
|
| + main()
|
| + except InstallError as e:
|
| + print
|
| + print e
|
| + except shutil.Error as e:
|
| + print "Error while copying file. Please ensure file is not in use."
|
| + print e
|
| + except WindowsError as e:
|
| + if e.winerror == 5:
|
| + print "Access denied error. Please ensure Visual Studio and MSBuild"
|
| + print "processes are closed."
|
| + else:
|
| + raise
|
| +
|
|
|