| Index: cloud_print/virtual_driver/win/install/setup.cc
|
| diff --git a/cloud_print/virtual_driver/win/install/setup.cc b/cloud_print/virtual_driver/win/install/setup.cc
|
| index 3bd88e5dfcda9a69cf129fbcf77d516ab9d14c21..3583132de5531112d15480a2d4bce4a06417aba8 100644
|
| --- a/cloud_print/virtual_driver/win/install/setup.cc
|
| +++ b/cloud_print/virtual_driver/win/install/setup.cc
|
| @@ -41,7 +41,7 @@ const wchar_t kUninstallRegistry[] =
|
| const wchar_t kInstallerName[] = L"virtual_driver_setup.exe";
|
| const wchar_t kGcpUrl[] = L"http://www.google.com/cloudprint";
|
|
|
| -const char kDoUninstallSwitch[] = "douninstall";
|
| +const char kDelete[] = "delete";
|
| const char kInstallSwitch[] = "install";
|
| const char kRegisterSwitch[] = "register";
|
| const char kUninstallSwitch[] = "uninstall";
|
| @@ -516,13 +516,13 @@ HRESULT UnregisterVirtualDriver() {
|
| return hr;
|
| }
|
|
|
| -HRESULT DoLaunchUninstall(const FilePath& installer_source, bool wait) {
|
| +HRESULT DeleteProgramDir(const FilePath& installer_source, bool wait) {
|
| FilePath temp_path;
|
| if (file_util::CreateTemporaryFile(&temp_path)) {
|
| file_util::CopyFile(installer_source, temp_path);
|
| file_util::DeleteAfterReboot(temp_path);
|
| CommandLine command_line(temp_path);
|
| - command_line.AppendArg(kDoUninstallSwitch);
|
| + command_line.AppendSwitchPath(kDelete, installer_source.DirName());
|
| base::LaunchOptions options;
|
| options.wait = wait;
|
| base::ProcessHandle process_handle;
|
| @@ -545,11 +545,15 @@ HRESULT DoLaunchUninstall(const FilePath& installer_source, bool wait) {
|
| return S_OK;
|
| }
|
|
|
| -HRESULT LaunchChildForUninstall() {
|
| +HRESULT DoUninstall() {
|
| + DeleteGoogleUpdateKeys();
|
| + HRESULT result = UnregisterVirtualDriver();
|
| + if (FAILED(result))
|
| + return result;
|
| + CleanupUninstall();
|
| FilePath installer_source;
|
| - if (PathService::Get(base::FILE_EXE, &installer_source)) {
|
| - return DoLaunchUninstall(installer_source, false);
|
| - }
|
| + if (PathService::Get(base::FILE_EXE, &installer_source))
|
| + return DeleteProgramDir(installer_source, false);
|
| return S_OK;
|
| }
|
|
|
| @@ -564,20 +568,13 @@ HRESULT DoRegister(const FilePath& install_path) {
|
| return RegisterVirtualDriver(install_path);
|
| }
|
|
|
| -HRESULT DoUninstall() {
|
| - FilePath install_path;
|
| - GetCurrentInstallPath(&install_path);
|
| - if (install_path.value().empty()) {
|
| +HRESULT DoDelete(const FilePath& install_path) {
|
| + if (install_path.value().empty())
|
| + return E_INVALIDARG;
|
| + if (!file_util::DirectoryExists(install_path))
|
| return S_FALSE;
|
| - }
|
| - HRESULT result = UnregisterVirtualDriver();
|
| - if (FAILED(result))
|
| - return result;
|
| - DeleteGoogleUpdateKeys();
|
| - if (file_util::DirectoryExists(install_path))
|
| - file_util::Delete(install_path, true);
|
| - CleanupUninstall();
|
| - return result;
|
| + Sleep(5000); // Give parent some time to exit.
|
| + return file_util::Delete(install_path, true) ? S_OK : E_FAIL;
|
| }
|
|
|
| HRESULT DoInstall(const FilePath& install_path) {
|
| @@ -610,10 +607,10 @@ HRESULT ExecuteCommands() {
|
| return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND);
|
| }
|
|
|
| - if (command_line.HasSwitch(kDoUninstallSwitch)) {
|
| - return DoUninstall();
|
| + if (command_line.HasSwitch(kDelete)) {
|
| + return DoDelete(command_line.GetSwitchValuePath(kDelete));
|
| } else if (command_line.HasSwitch(kUninstallSwitch)) {
|
| - return LaunchChildForUninstall();
|
| + return DoUninstall();
|
| } else if (command_line.HasSwitch(kInstallSwitch)) {
|
| return DoInstall(exe_path);
|
| } else if (command_line.HasSwitch(kUnregisterSwitch)) {
|
|
|