Examples

This page contains practical examples of using AppGuard in various scenarios.

Basic Usage

Python Basic Example

from app_guard import AppGuard
import time

def on_quit():
    print("Another instance is running, exiting...")

def main():
    # Initialize AppGuard
    AppGuard.init("MyUniqueApp", on_quit, quit_immediate=True)

    if AppGuard.is_primary_instance():
        print("Primary instance started")

        # Your main application logic
        while True:
            print("Running...")
            time.sleep(5)
    else:
        print("Secondary instance detected")

if __name__ == "__main__":
    main()

C++ Basic Example

#include "AppGuard.h"
#include <iostream>
#include <thread>
#include <chrono>

void on_quit() {
    std::cout << "Another instance is running, exiting..." << std::endl;
}

int main() {
    AG_init("MyUniqueApp", on_quit, true);

    if (AG_is_primary_instance()) {
        std::cout << "Primary instance started" << std::endl;

        // Main application loop
        while (true) {
            std::cout << "Running..." << std::endl;
            std::this_thread::sleep_for(std::chrono::seconds(5));
        }
    } else {
        std::cout << "Secondary instance detected" << std::endl;
    }

    AG_release();
    return 0;
}

IPC Communication

Python IPC Example

from app_guard import AppGuard
import sys

def handle_message(msg_data):
    print(f"Received message: {msg_data['msg_data']}")

def on_quit():
    print("Forwarding to primary instance...")

def main():
    app = AppGuard()

    if len(sys.argv) > 1:
        # Secondary instance - send message and quit
        AppGuard.init("MyApp", on_quit, quit_immediate=False)

        if not AppGuard.is_primary_instance():
            message = " ".join(sys.argv[1:])
            app.send_msg_request("command_line", message)
            AppGuard.release()
            return

    # Primary instance
    AppGuard.init("MyApp", None, quit_immediate=True)

    if AppGuard.is_primary_instance():
        # Register message handler
        msg = app.create_ipc_msg("command_line", handle_message)
        app.register_msg(msg)

        print("Primary instance running, waiting for messages...")

        # Keep running
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            app.unregister_msg(msg)
            AppGuard.release()

if __name__ == "__main__":
    main()

Advanced Examples

Note: Additional examples will be added here covering:

  • GUI applications with window focusing

  • Service applications with configuration updates

  • Multi-threaded applications

  • Error handling and recovery

  • Cross-platform considerations