crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Проблемы с environment дочернего приложения
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
mva Дата 30.10.2010, 14:21
  Все, проблему удалось решить таким кодом:

                    QProcess* proc = new QProcess();
                    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
                    env.insert("PGPASSWORD", password);
                    proc->setProcessEnvironment(env);
                    proc->start("psql", QStringList()  << "-U" << "postgres" << "-f" << initScriptFileName << lastDbName);
                    if (!proc->waitForStarted())
                        app->showError(QObject::tr("Не удалось запустить psql"));
                    else
                        if (proc->waitForFinished())
                            lResult = true;


Всем спасибо за внимание.
mva Дата 29.10.2010, 7:52
 
Цитата(Litkevich Yuriy @ 29.10.2010, 0:07) *
Попробуй открыть командную строку, задать в ней переменную окружения и выполнить программу psql. Будет ли работать?


Да, так работает. А чем можно посмотреть переменные окружения дочернего процесса?
Litkevich Yuriy Дата 28.10.2010, 23:07
 
Цитата(mva @ 29.10.2010, 1:36) *
но при проверке ProcessExplorer'ом этой переменной в среде окружения psql нет.
и не будет. он ничего не знает о локальном окружении. только о том в котором он сам запущен.

Попробуй открыть командную строку, задать в ней переменную окружения и выполнить программу psql. Будет ли работать?
mva Дата 28.10.2010, 22:36
  Доброго времени суток всем!

Мое приложение работает с PostgreSQL и во время работы вызывает консольное приложение psql для выполнения некоторых операций с сервером.
Консольное приложение запускается следующим образом:
                    QProcess* proc = new QProcess();
                    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
                    env.insert("PGPASSWORD", password);
                    proc->setProcessEnvironment(env);
                    if (proc->execute("psql", QStringList()  << "-U" << "postgres" << "-f" << initScriptFileName << lastDbName) >= 0)
                        lResult = true;
                    else
                        app->showError(QObject::tr("Не удалось запустить psql"));


Проблема в том, что программа зависает на команде execute. Т.е. консольное приложение не выполняется, т.к. ждет ввода пароля, который передать через параметры в утилиту нельзя. В моем случае по идее пароль передается через среду окружения.
Если смотреть отладчиком QtCreator'а, то переменная PGPASSWORD как будто создается, но при проверке ProcessExplorer'ом этой переменной в среде окружения psql нет. Если создать эту переменную вручную через свойства ярлычка "Мой компьютер", то все работает нормально.

Под Linux все работает нормально.


Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:10