chromium/chrome/browser/win/uninstallation_via_os_settings.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_WIN_UNINSTALLATION_VIA_OS_SETTINGS_H_
#define CHROME_BROWSER_WIN_UNINSTALLATION_VIA_OS_SETTINGS_H_

#include <string>

namespace base {

class CommandLine;
class FilePath;

}  // namespace base

// Registers an uninstall command for a program |key| with the
// Windows Programs and Features control panel.
// The API doesn't allow same duplicate entry for the |key|. If the caller
// updates the uninstall string, it should delete the previous one first.
// |key|: A command ID that is a representative of the application.
// |display_name|: Display name that will be shown on App or Remove Program.
// |publisher|: URL Origin name of the App where it is installed from.
// |uninstall_command|: A command line that has command string that is run
// when the uninstall command is executed for the target application.
// |icon_path|: An icon that will be shown with name in the uninstall UI
// such as Program and Features.
// The system default icon will be used if |icon_path| is empty.
bool RegisterUninstallationViaOsSettings(
    const std::wstring& key,
    const std::wstring& display_name,
    const std::wstring& publisher,
    const base::CommandLine& uninstall_command,
    const base::FilePath& icon_path);

// Removes the uninstall command for the program `key`. `key` should be
// same with what is used for RegisterUninstallationViaOsSettings for the entry.
// Returns true if no error occurred. The registry entry not existing in the
// first place is considered a success.
bool UnregisterUninstallationViaOsSettings(const std::wstring& key);

#endif  // CHROME_BROWSER_WIN_UNINSTALLATION_VIA_OS_SETTINGS_H_