2014-04-28 2 views
3

내 자동 업데이터는 프로그램 폴더의 파일을 수정 한 이후로 실행하려면 관리자 권한이 필요합니다. 이 모든 것이 잘 작동합니다. 업데이트가 완료되면 QT 일반 사용자로 프로그램 시작

그러나, 나는 내 updater.exe이 관리자 권한없이 myApplication.exe하지만 을 시작합니다.

나는 현재 updater.exe에서 myApplication.exe을 시작하기 위해 사용하는 코드 :

bool started = QDesktopServices::openUrl(QUrl::fromLocalFile(exeFileName)); 
if (started) 
{ 
    QApplication::quit(); 
} 

문제는 myApplication.exe admin으로 시작될 때, 예를 들어, 내 로컬 경로를 망쳐 놨이다 :

QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); 

관리자 사용자 폴더를 가리 킵니다. 그리고 응용 프로그램을 실행하는 실제 사용자가 아닙니다.

여기에 아이디어가 있습니까?

나는 다음과 같은 테스트하고 있습니다 Merlin069의 답변에 따라

갱신 :

TCHAR username[UNLEN + 1]; 
DWORD size = UNLEN + 1; 
GetUserName((TCHAR*)username, &size); 

qDebug() << QHostInfo::localHostName(); 

QProcess::startDetached("runas \"/user:<" + QHostInfo::localHostName() + ">\"" + username + ""\" \"" + exeFileName + "\"); 

답변

0

난 당신이 여기에 Windows를 사용하는 가정하고 있습니다.

QProcess :: startDetached를 사용하여 응용 프로그램을 시작하고 Windows RunAs 명령 줄 프로그램을 사용하여 다른 사용자로 실행할 수 있습니다. 예를 들어

: - 경로에 공백이 포함 된 경우

QProcess::startDetached("runas /user:<localmachinename>\user exeFileName"); 

, 인용 부호를 둘러싸고 : -

내가으로 실행해야하는지 사용자가 알 수있는 방법
QProcess::startDetached("runas \"/user:<localmachinename>\user\" \"exeFileName\""); 
+0

? 또한 localmachinename을 어떻게 찾을 수 있습니까? – user3490755

+0

Google로 쉽게 검색 할 수 있어야합니다. 예를 들어, 로그인 한 사용자를 얻으려면 : http://msdn.microsoft.com/en-us/library/421tdddx.aspx 또는 로컬 컴퓨터 이름 : http://stackoverflow.com/questions/504810/how-do -i-find-the-current-machines-full-hostname-in-c- 호스트 이름 및 도메인 정보. 또는 호스트 이름에 Qt를 사용합니다. QHostInfo :: localHostName(). – TheDarkKnight

+0

그냥 RunAs 명령을 사용하여 사용자가 암호를 입력해야한다는 것을 알게되었습니다 – user3490755

관련 문제