fixing bug 85564 - InstallTrigger.getVersion returns NULL when the component has been installed. r=sgehani, sr=mscott, a=drivers@mozilla.org.

This commit is contained in:
ssu%netscape.com 2001-06-22 06:19:40 +00:00
Родитель 297fa736e5
Коммит 4283a2ba2c
2 изменённых файлов: 40 добавлений и 0 удалений

Просмотреть файл

@ -37,6 +37,8 @@
#include "nsRepository.h"
#include "nsIServiceManager.h"
#include "nsIDirectoryService.h"
#include "nsDirectoryServiceDefs.h"
#include "nsSpecialSystemDirectory.h"
#include "VerReg.h"
@ -313,9 +315,36 @@ nsInstallTrigger::CompareVersion(const nsString& aRegName, const nsString& aVers
return CompareVersion(aRegName, &inVersion, aReturn);
}
NS_IMETHODIMP
nsInstallTrigger::InitRegistry(void)
{
nsresult rv;
NR_StartupRegistry(); /* startup the registry; if already started, this will essentially be a noop */
NS_WITH_SERVICE(nsIProperties, directoryService, NS_DIRECTORY_SERVICE_CONTRACTID, &rv);
if(!directoryService)
return NS_ERROR_FAILURE;
nsCOMPtr<nsILocalFile> dir;
directoryService->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsIFile), getter_AddRefs(dir));
if (dir)
{
char* nativePath;
dir->GetPath(&nativePath);
// EVIL version registry does not take a nsIFile.;
VR_SetRegDirectory( nativePath );
if (nativePath)
nsMemory::Free(nativePath);
}
return NS_OK;
}
NS_IMETHODIMP
nsInstallTrigger::CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)
{
nsresult rv;
*aReturn = EQUAL; // assume failure.
PRBool enabled;
@ -329,6 +358,10 @@ nsInstallTrigger::CompareVersion(const nsString& aRegName, nsIDOMInstallVersion*
REGERR status;
nsInstallVersion regNameVersion;
rv = InitRegistry();
if(rv != NS_OK)
return rv;
status = VR_GetVersion( NS_CONST_CAST(char *, regName.get()), &cVersion );
/* if we got the version */
@ -357,6 +390,7 @@ nsInstallTrigger::CompareVersion(const nsString& aRegName, nsIDOMInstallVersion*
NS_IMETHODIMP
nsInstallTrigger::GetVersion(const nsString& component, nsString& version)
{
nsresult rv;
PRBool enabled;
UpdateEnabled(&enabled);
@ -367,6 +401,10 @@ nsInstallTrigger::GetVersion(const nsString& component, nsString& version)
NS_ConvertUCS2toUTF8 regName(component);
REGERR status;
rv = InitRegistry();
if(rv != NS_OK)
return rv;
status = VR_GetVersion( NS_CONST_CAST(char *, regName.get()), &cVersion );
version.Truncate();

Просмотреть файл

@ -53,6 +53,8 @@ class nsInstallTrigger: public nsIScriptObjectOwner,
private:
void *mScriptObject;
NS_IMETHOD InitRegistry(void);
};
#define NS_INSTALLTRIGGERCOMPONENT_CONTRACTID NS_IAPPSHELLCOMPONENT_CONTRACTID "/xpinstall/installtrigger;1"