首先在windows上安装软件就会在注册表留下信息,其中就包括了软件安装路径,也就是exe软件的路径,找到这个路径之后,就可以用QProcess启动外部软件的进程了
但是这里有一个坑,就是软件安装后在注册表的信息不确定,一种在HKEY_CURRENT_USER路径下,如下:
另外一种在HKEY_LOCAL_MACHINE
一般安装在C盘且是默认路径的都会是第一种情况,另外就是自定义安装在其他盘会是第二种情况,所以根据安装路径不同获取的方式不同,下面就是两种情况都可以获取出路径的代码:
void cradle::GetChromePath(QString& strPath)
{
HKEY hKey;
TCHAR SubKeyName[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe");
TCHAR ValueData[1024];
char Data[1024];
DWORD Buffer=1024;
if(RegOpenKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
{
qDebug()<<"Error: Regedit cannot be opened! ";
}
else
{
if(RegQueryValueEx(hKey, TEXT("Path"), 0, NULL, (LPBYTE)ValueData, &Buffer) == ERROR_SUCCESS)
{
Wide2Bytes(Data, ValueData);
QString strPathTemp =QString::fromStdWString(ValueData);
strPathTemp +="\\chrome.exe";
strPathTemp = strPathTemp.replace(QRegExp("\\\\"),"/");
strPath = strPathTemp;
RegCloseKey(hKey);
}
else
qDebug()<<"RegQueryValueEx failed![ValueData = %s]",ValueData;
}
if(strPath != "")
{
return;
}
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, SubKeyName, 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
{
qDebug()<<"Error: Regedit cannot be opened! ";
}
else
{
if(RegQueryValueEx(hKey, TEXT("Path"), 0, NULL, (LPBYTE)ValueData, &Buffer) == ERROR_SUCCESS)
{
Wide2Bytes(Data, ValueData);
QString strPathTemp =QString::fromStdWString(ValueData);
strPathTemp +="\\chrome.exe";
strPathTemp = strPathTemp.replace(QRegExp("\\\\"),"/");
strPath = strPathTemp;
RegCloseKey(hKey);
}
else
qDebug()<<"RegQueryValueEx failed![ValueData = %s]",ValueData;
}
}