crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Autorun, Хочу, чтобы программа стартовала вместе с ОС
mishaga
  опции профиля:
сообщение 16.5.2009, 9:23
Сообщение #11


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 15.2.2009
Пользователь №: 552

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всё круто, в Виндах кодян работает.

Но вот тут недавно забавная вещь приключилась - моя программа через QProcess
запускает другую программу (тоже мою, я сам её писал). Так вот, если главная программа
стартовала с ОС, то вторую программу она не можут запустить. А если главную программу
запускать ручками, то вторая запускается за милую душу.
Чё ж делать?
Если программа запускается со стартом ОС, мне нужно, чтобы она могла запустить другую.
Помогите, у кого какие идеи есть!..

Вот мой кодян:

// это конструстор
Tray::Tray()
{
    WhereAmI = QCoreApplication::applicationDirPath(); // узнаём, в какой папке находится программа
    // переменная WhereAmI объявлена в h-файле (тип - QString)
    ...
    connect( &processBOB, SIGNAL(error(QProcess::ProcessError)), this, SLOT(error(QProcess::ProcessError)) );
    // error - моя функция, описана ниже
    ...
    execBOB( true ); // моя функция, описана ниже
}



// это функция execBOB();
void Tray::execBOB(bool args)
{
    QString st = "";
    if ( args ) st = "-r";
    processBOB.start( WhereAmI + "/programs/Base_of_Birthdays" + getSuffix(), QStringList() << st );
    // если args == true, передаём аргумент -r
    // если false, передаём пустую строку параметров (т.е., не передаём параметры)
}


// это функция error(), которая вызывается, когда processBOB даёт сбои
void Tray::error(QProcess::ProcessError error)
{
    QString ErrorText = "";
    switch (error)
    {
        case QProcess::FailedToStart    : ErrorText = "Failed to start";    break;
        case QProcess::Crashed            : ErrorText = "Crached";            break;
        case QProcess::Timedout            : ErrorText = "Timedout";            break;
        case QProcess::WriteError        : ErrorText = "Write error";        break;
        case QProcess::ReadError        : ErrorText = "Read error";            break;
        default /* UnknownError */        : ErrorText = "Unknown error";        break;
    }
    trayIcon->showMessage("Error", ErrorText, QSystemTrayIcon::Critical, 3000);
}


Так вот, у меня, если программа стартует с ОС, появляется ошибка "Crached"
А если запускать ручками, всё работает отлично
Помогите! Это моя ВКР, её уже сдавать давно пора!.. =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.5.2009, 12:12
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mishaga @ 16.5.2009, 13:23) *
если программа стартует с ОС
а как ты её запускаешь? В реестре прописываешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Авварон
  опции профиля:
сообщение 16.5.2009, 17:16
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 99
Регистрация: 26.4.2009
Пользователь №: 709

Спасибо сказали: 14 раз(а)




Репутация:   0  


Цитата(mishaga @ 15.2.2009, 6:44) *
А вот для Маков ваще не в курсе как... Не сидел даже ни разу под Маком...

в макоси за бут приложений на стартапе отвечает файл ./Library/Preferences/loginwindow.plist в домашней директории пользователя. Только хз, как его из программы изменить - в гугле что-то есть по этому поводу, но разбираться лень, да и не нужно (у меня нет ни 1й программы в авторане:))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mishaga
  опции профиля:
сообщение 18.5.2009, 10:09
Сообщение #14


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 15.2.2009
Пользователь №: 552

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 16.5.2009, 12:12) *
а как ты её запускаешь? В реестре прописываешь?


Да, в реестре в ключе
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 18.5.2009, 19:51
Сообщение #15


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Дык рабочий каталог если не ошибаюсь будет систем32.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mishaga
  опции профиля:
сообщение 19.5.2009, 14:00
Сообщение #16


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 15.2.2009
Пользователь №: 552

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(molchanoviv @ 18.5.2009, 19:51) *
Дык рабочий каталог если не ошибаюсь будет систем32.


Там нет значения, какой рабочий каталог,
ведь программа запускается командой
processBOB.start( WhereAmI + "/programs/Base_of_Birthdays" + getSuffix(), QStringList() << st );
А в WhereAmI - это полный путь к папке, в которой лежит моя программа.
Подпрограммы соответственно лежат в папке WhereAmI + "/programs/"
А функция getSuffix() вернёт ".exe", если программа запускается на Винде.

Вообще, у меня на компе всё работает.
Это на некоторых других компах (где тоже WinXP) программа, которая есть в автозагрузке,
не может через QProcess запустить другую программу. QProcess выдаёт слот с ошибкой Crached.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


13 чел. читают эту тему (гостей: 13, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.12.2024, 13:09