view ui/installwrapper.h @ 1306:845048d4a69f

(issue159) Use user specific appdata directory for nss list with simple rights. Using the ProgramData folder with resticted access rights failed in case the process was not elevated.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 13 Oct 2014 12:31:37 +0200
parents c8f698ca6355
children
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#ifndef UI_INSTALLWRAPPER_H
#define UI_INSTALLWRAPPER_H

#include <QFileInfo>
#include <QString>
#include <QStringList>
#include <QTemporaryFile>
#include <QThread>

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

/** @brief Get the FileInfo for the installation process.
 *
 * This points to the file where the installation process is
 * supposed to be.
 *
 * @returns A FileInfo with the path of the installation process.*/
QFileInfo getCinstProcInfo();

 /** @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 certificate installer 
     * process to execute the specified instructions with the
     * provided certificatelist.
     *
     * The trustbridge-certificate-installer executable is expected
     * to be in the same directory as the current application.
     *
     * @param[in] parent the parent object.
     * @param[in] path the absolute path to the certificatelist.
     * @param[in] instructions a list of R: / I: \<cert\> lines to execute.
     */
    InstallWrapper(QObject* parent, const QString& path,
                   const QStringList& instructions);

private:
    /**@brief write the choices made into a temporary file
     *
     * @param[in] choicesFile the temporary file to write.
     *
     * @returns true on success. false on error.
     */
    bool writeChoices(QTemporaryFile* choicesFile) const;

    const QString mCertListFile;
    const QStringList mChoices;

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);

    /**
     * @brief The installation was successful
     *
     * This only means the installation was successful as far as we
     * can tell as there is no backchannel from the installation processes.
     */
    void installationSuccessful();
};

#endif // UI_INSTALLWRAPPER_H

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