view ui/installwrapper.h @ 256:84ae353688e0

Add installwrapper class to handle process communication
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 01 Apr 2014 10:52:06 +0000
parents
children f23e0ccd5d14
line wrap: on
line source
#ifndef UI_INSTALLWRAPPER_H
#define UI_INSTALLWRAPPER_H

#include <QString>
#include <QStringList>
#include <QProcess>
#include <QThread>

#include "certificate.h"
/** @file installwrapper.h
 * @brief Wrapper around the call to the updated process */

 /** @brief wrapper around installer process
  *
  * This wrapper is mostly needed because QProcess executes
  * a process on Windows directly with CreateProcess and
  * thus can not be used to elevate the Process.
  *
  * On Windows this class uses ShellExecuteExW to control
  * the child process. On Linux systems QProcess is used.
  *
  * It subclasses QThread so the installation can be done
  * asynchronusly. */
class InstallWrapper : public QThread
{
    Q_OBJECT

public:
    /**
     * @brief Construct an installwrapper for a certificateList
     *
     * The install wrapper will start the cinst process to execute
     * the specified instructions with the provided certificatelist.
     *
     * The cinst executable is expected to be in the same directory
     * as the current application.
     *
     * @param[in] parent the parent object.
     * @param[in] listFileName the absolute path to the certificatelist.
     * @param[in] instructions a list of instructions to execute.
     */
    InstallWrapper(QObject* parent, const QString& path,
                   const QStringList& instructions);

private:
    const QString mCertListFile;
    const QStringList mInstructions;
#ifdef WIN32
    SHELLEXECUTEINFOW mExecInfo;
#else
    QProcess cinstProc;
#endif

protected:
    void run();

Q_SIGNALS:
    /**
     * @brief An error happened
     *
     * @param[out] message: A localized message to show. Can be empty.
     */
    void error(const QString &message);
};

#endif // UI_INSTALLWRAPPER_H

http://wald.intevation.org/projects/trustbridge/