OSDN Git Service

Added 'Traditional Chinese' (Taiwanese) translation by 456Vv <123@456vv.com>.
[lamexp/LameXP.git] / src / Tool_Abstract.cpp
index 2b599c3..2bb5add 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2010 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2011 LoRd_MuldeR <MuldeR2@GMX.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 
 #include "Tool_Abstract.h"
 
+#include "Global.h"
+
 #include <QProcess>
 #include <QMutex>
 #include <QMutexLocker>
 #include <QLibrary>
-#include <Windows.h>
+#include <QProcessEnvironment>
+#include <QDir>
 
 /*
  * Win32 API definitions
@@ -77,6 +80,8 @@ AbstractTool::AbstractTool(void)
                        }
                }
        }
+
+       m_firstLaunch = true;
 }
 
 /*
@@ -94,9 +99,14 @@ bool AbstractTool::startProcess(QProcess &process, const QString &program, const
        static AssignProcessToJobObjectFun AssignProcessToJobObjectPtr = NULL;
        
        QMutexLocker lock(m_mutex_startProcess);
-       
        emit messageLogged(commandline2string(program, args) + "\n");
 
+       QProcessEnvironment env = process.processEnvironment();
+       if(env.isEmpty()) env = QProcessEnvironment::systemEnvironment();
+       env.insert("TEMP", QDir::toNativeSeparators(lamexp_temp_folder2()));
+       env.insert("TMP", QDir::toNativeSeparators(lamexp_temp_folder2()));
+       process.setProcessEnvironment(env);
+       
        if(!AssignProcessToJobObjectPtr)
        {
                QLibrary Kernel32Lib("kernel32.dll");
@@ -118,11 +128,24 @@ bool AbstractTool::startProcess(QProcess &process, const QString &program, const
                {
                        SetPriorityClass(process.pid()->hProcess, IDLE_PRIORITY_CLASS);
                }
+               
                lock.unlock();
-               emit statusUpdated(0);
+               
+               if(m_firstLaunch)
+               {
+                       emit statusUpdated(0);
+                       m_firstLaunch = false;
+               }
+               
                return true;
        }
 
+       emit messageLogged("Process creation has failed :-(");
+       QString errorMsg= process.errorString().trimmed();
+       if(!errorMsg.isEmpty()) emit messageLogged(errorMsg);
+
+       process.kill();
+       process.waitForFinished(-1);
        return false;
 }