A big rewrite of the whole RegisterClass, RegisterProgId,

RegisterExtension and RegisterMIME actions. We now handle verbs
properly, handle dependancies and such properly and keep track of what
we need to register and what we do not properly.
This commit is contained in:
Aric Stewart 2005-05-26 12:24:28 +00:00 committed by Alexandre Julliard
parent 426984ddb4
commit 6f43c18fe7
3 changed files with 1474 additions and 557 deletions

File diff suppressed because it is too large Load Diff

View File

@ -18,15 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define IDENTIFIER_SIZE 96
typedef struct tagMSIFEATURE
{
WCHAR Feature[96];
WCHAR Feature_Parent[96];
WCHAR Feature[IDENTIFIER_SIZE];
WCHAR Feature_Parent[IDENTIFIER_SIZE];
WCHAR Title[0x100];
WCHAR Description[0x100];
INT Display;
INT Level;
WCHAR Directory[96];
WCHAR Directory[IDENTIFIER_SIZE];
INT Attributes;
INSTALLSTATE Installed;
@ -40,12 +42,12 @@ typedef struct tagMSIFEATURE
typedef struct tagMSICOMPONENT
{
WCHAR Component[96];
WCHAR ComponentId[96];
WCHAR Directory[96];
WCHAR Component[IDENTIFIER_SIZE];
WCHAR ComponentId[IDENTIFIER_SIZE];
WCHAR Directory[IDENTIFIER_SIZE];
INT Attributes;
WCHAR Condition[0x100];
WCHAR KeyPath[96];
WCHAR KeyPath[IDENTIFIER_SIZE];
INSTALLSTATE Installed;
INSTALLSTATE ActionRequest;
@ -56,6 +58,7 @@ typedef struct tagMSICOMPONENT
INT RefCount;
LPWSTR FullKeypath;
LPWSTR AdvertiseString;
} MSICOMPONENT;
typedef struct tagMSIFOLDER
@ -100,6 +103,81 @@ typedef struct tagMSIFILE
BOOL Temporary;
}MSIFILE;
typedef struct tagMSICLASS
{
WCHAR CLSID[IDENTIFIER_SIZE]; /* Primary Key */
WCHAR Context[IDENTIFIER_SIZE]; /* Primary Key */
INT ComponentIndex; /* Primary Key */
INT ProgIDIndex;
LPWSTR ProgIDText;
LPWSTR Description;
INT AppIDIndex;
LPWSTR FileTypeMask;
LPWSTR IconPath;
LPWSTR DefInprocHandler;
LPWSTR DefInprocHandler32;
LPWSTR Argument;
INT FeatureIndex;
INT Attributes;
/* not in the table, set during instalation */
BOOL Installed;
} MSICLASS;
typedef struct tagMSIEXTENSION
{
WCHAR Extension[256]; /* Primary Key */
INT ComponentIndex; /* Primary Key */
INT ProgIDIndex;
LPWSTR ProgIDText;
INT MIMEIndex;
INT FeatureIndex;
/* not in the table, set during instalation */
BOOL Installed;
INT VerbCount;
INT Verbs[100]; /* yes hard coded limit, but relisticly 100 verbs??? */
} MSIEXTENSION;
typedef struct tagMSIPROGID
{
LPWSTR ProgID; /* Primary Key */
INT ParentIndex;
INT ClassIndex;
LPWSTR Description;
LPWSTR IconPath;
/* not in the table, set during instalation */
BOOL InstallMe;
} MSIPROGID;
typedef struct tagMSIVERB
{
INT ExtensionIndex;
LPWSTR Verb;
INT Sequence;
LPWSTR Command;
LPWSTR Argument;
} MSIVERB;
typedef struct tagMSIMIME
{
LPWSTR ContentType; /* Primary Key */
INT ExtensionIndex;
WCHAR CLSID[IDENTIFIER_SIZE];
INT ClassIndex;
/* not in the table, set during instalation */
BOOL InstallMe;
} MSIMIME;
typedef struct tagMSIAPPID
{
WCHAR AppID[IDENTIFIER_SIZE]; /* Primary key */
LPWSTR RemoteServerName;
LPWSTR LocalServer;
LPWSTR ServiceParameters;
LPWSTR DllSurrogate;
BOOL ActivateAtStorage;
BOOL RunAsInteractiveUser;
} MSIAPPID;
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action);
UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action);

View File

@ -197,6 +197,19 @@ typedef struct tagMSIPACKAGE
LPWSTR ActionFormat;
LPWSTR LastAction;
struct tagMSICLASS *classes;
UINT loaded_classes;
struct tagMSIEXTENSION *extensions;
UINT loaded_extensions;
struct tagMSIPROGID *progids;
UINT loaded_progids;
struct tagMSIVERB *verbs;
UINT loaded_verbs;
struct tagMSIMIME *mimes;
UINT loaded_mimes;
struct tagMSIAPPID *appids;
UINT loaded_appids;
LPWSTR *DeferredAction;
UINT DeferredActionCount;