# Package `com.install4j.api.actions`

This package contains the interfaces and abstract base classes for actions.

See the [API overview](../../api.md) for general remarks on
how to use the install4j API.

The [`Action`](Action.md) interface is a marker interface that indicates that a bean is an action. The concrete interfaces
are [`InstallAction`](InstallAction.md) and [`UninstallAction`](UninstallAction.md).
[`AutoUninstallAction`](AutoUninstallAction.md) is implemented by
install actions that wish to automatically be invoked during the uninstallation in order to revert their changes.

When you develop your own actions, it is recommended that you extend one of the abstract base classes in this package
rather than implement the interfaces themselves.

Actions that run the elevated helper process - either because the bean info requires elevation or the user configured
it in the IDE - **must not declare non-serializable fields**. If such fields are required for some purpose at runtime,
declare them as `transient`, for example

```
private transient Process process;
```

## Types

| Type | Kind | Description |
|---|---|---|
| [AbstractInstallAction](AbstractInstallAction.md) | class | Abstract base class for install actions. |
| [AbstractInstallOrUninstallAction](AbstractInstallOrUninstallAction.md) | class | Abstract base class for actions that can be used for installation or uninstallation. |
| [AbstractUninstallAction](AbstractUninstallAction.md) | class | Abstract base class for uninstall actions. |
| [Action](Action.md) | interface | The base interface for all actions. |
| [AutoUninstallAction](AutoUninstallAction.md) | interface | If you write an installation action that wants to be automatically invoked in the uninstaller to revert its changes, you can additionally implement this interface. |
| [InstallAction](InstallAction.md) | interface | All install actions must implement this interface. |
| [UninstallAction](UninstallAction.md) | interface | All uninstall actions must implement this interface. |

