crossplatform.ru

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


  Ответ в Autorun
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
mishaga Дата 19.5.2009, 14:00
 
Цитата(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.
molchanoviv Дата 18.5.2009, 19:51
  Дык рабочий каталог если не ошибаюсь будет систем32.
mishaga Дата 18.5.2009, 10:09
 
Цитата(Litkevich Yuriy @ 16.5.2009, 12:12) *
а как ты её запускаешь? В реестре прописываешь?


Да, в реестре в ключе
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Авварон Дата 16.5.2009, 17:16
 
Цитата(mishaga @ 15.2.2009, 6:44) *
А вот для Маков ваще не в курсе как... Не сидел даже ни разу под Маком...

в макоси за бут приложений на стартапе отвечает файл ./Library/Preferences/loginwindow.plist в домашней директории пользователя. Только хз, как его из программы изменить - в гугле что-то есть по этому поводу, но разбираться лень, да и не нужно (у меня нет ни 1й программы в авторане:))
Litkevich Yuriy Дата 16.5.2009, 12:12
 
Цитата(mishaga @ 16.5.2009, 13:23) *
если программа стартует с ОС
а как ты её запускаешь? В реестре прописываешь?
mishaga Дата 16.5.2009, 9:23
  Всё круто, в Виндах кодян работает.

Но вот тут недавно забавная вещь приключилась - моя программа через 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"
А если запускать ручками, всё работает отлично
Помогите! Это моя ВКР, её уже сдавать давно пора!.. =)
Константин Дата 17.2.2009, 2:33
 
Цитата(edwardoid @ 17.2.2009, 0:28) *
ну извините, обыюно человеку у которого нет прав рута не доверят ставить проги под нормальный никс.

интересно как он их(проги) будет ставить, если даже ему доверят? рута ему ведь всё-равно не дадут :)

на мой взгляд Пантер предложил лучший вариант. с оговоркой, что запускается гуёвая программа или вспомогательный процесс, необходимый непосредственно юзверю его запустившему. такой подход позволяет юзверю персонально управлять автостартом необходимых ему приложений, а не навязывать их юзверю свыше как венда.
если же требуется запуск системного процесса (демона), которым непривелигированный пользователь управлять не должен, выбор очевиден в пользу QtService (либо адекватного аналога).
edwardoid Дата 17.2.2009, 0:28
  ну извините, обыюно человеку у которого нет прав рута не доверят ставить проги под нормальный никс.
panter_dsd Дата 16.2.2009, 20:21
  Использование демонов тоже не вариант:
1. Нет вероятности, что на всех Линухах будет работать.
2. Нужны права рута для установки демона.
ViGOur Дата 16.2.2009, 20:08
 
Цитата(panter_dsd @ 16.2.2009, 19:50) *
В Линухе можно глянуть в /home/user/.config/autostart или учесть разные DE
В том-то и дело, что нет уверенности, что учтешь все и так как нужно! :)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 15:52