656{
664 BOOL FunctionDllUnregisterServer =
FALSE;
669
673
674 DWORD RepairMode = 0;
675
679
681 DWORD LogAttributes = 0;
682
685
687
693
695
696
698
699
700
701
702
703
704
706 {
708 return 1;
709 }
710
713
715 {
717
719 {
720 FunctionRegServer =
TRUE;
721 }
724 {
725 FunctionUnregServer =
TRUE;
726 }
728 {
731 FunctionInstall =
TRUE;
733 argvWi += argLen;
734 else
735 {
741 }
742 PackageName = argvWi;
743 }
745 {
746 FunctionInstall =
TRUE;
747 FunctionInstallAdmin =
TRUE;
753 PackageName = argvW[
i];
755 }
757 {
760 FunctionRepair =
TRUE;
762 {
764 {
765 case 'P':
766 case 'p':
768 break;
769 case 'O':
770 case 'o':
772 break;
773 case 'E':
774 case 'e':
776 break;
777 case 'D':
778 case 'd':
780 break;
781 case 'C':
782 case 'c':
784 break;
785 case 'A':
786 case 'a':
788 break;
789 case 'U':
790 case 'u':
792 break;
793 case 'M':
794 case 'm':
796 break;
797 case 'S':
798 case 's':
800 break;
801 case 'V':
802 case 'v':
804 break;
805 default:
806 report_error(
"Unknown option \"%c\" in Repair mode\n", argvW[
i][
j]);
807 break;
808 }
809 }
811 {
817 }
822 PackageName = argvW[
i];
823 }
825 {
826 FunctionInstall =
TRUE;
828 if(!PackageName || !PackageName[0])
829 {
833 PackageName = argvW[
i];
834 }
837 }
839 {
842 FunctionAdvertise =
TRUE;
844 {
846 {
847 case 'U':
848 case 'u':
850 break;
851 case 'M':
852 case 'm':
854 break;
855 default:
856 report_error(
"Unknown option \"%c\" in Advertise mode\n", argvW[
i][
j]);
857 break;
858 }
859 }
864 PackageName = argvW[
i];
865 }
867 {
868 FunctionAdvertise =
TRUE;
874 PackageName = argvW[
i];
875 }
877 {
878 FunctionAdvertise =
TRUE;
884 PackageName = argvW[
i];
885 }
887 {
893 }
895 {
901 }
903 {
907 {
909 {
910 case 'I':
911 case 'i':
913 break;
914 case 'W':
915 case 'w':
917 break;
918 case 'E':
919 case 'e':
921 break;
922 case 'A':
923 case 'a':
925 break;
926 case 'R':
927 case 'r':
929 break;
930 case 'U':
931 case 'u':
933 break;
934 case 'C':
935 case 'c':
937 break;
938 case 'M':
939 case 'm':
941 break;
942 case 'O':
943 case 'o':
945 break;
946 case 'P':
947 case 'p':
949 break;
950 case 'V':
951 case 'v':
953 break;
954 case '*':
970 break;
971 case '+':
973 break;
974 case '!':
976 break;
977 default:
978 break;
979 }
980 }
987 {
991 }
992 }
994 {
995 FunctionPatch =
TRUE;
1000 PatchFileName = argvW[
i];
1001 }
1003 {
1006 {
1009 }
1011 {
1013 }
1015 {
1017 }
1019 {
1021 }
1023 {
1025
1027
1029 {
1035 {
1038 }
1040 }
1041 }
1042 else
1043 {
1046 }
1047 }
1049 {
1052 }
1054 {
1055 FunctionDllRegisterServer =
TRUE;
1061 }
1063 {
1064 FunctionDllUnregisterServer =
TRUE;
1070 }
1072 {
1074 }
1076 {
1077 FunctionUnknown =
TRUE;
1079 }
1081 {
1082 FunctionUnknown =
TRUE;
1084 }
1086 {
1087 FunctionServer =
TRUE;
1088 }
1089 else
1091 }
1092
1093
1095
1097
1098 if(FunctionInstallAdmin && FunctionPatch)
1099 FunctionInstall =
FALSE;
1100
1101 if (PackageName && !(package_unquoted =
remove_quotes(PackageName)))
return 1;
1102 if (PatchFileName && !(patch_unquoted =
remove_quotes(PatchFileName)))
return 1;
1103 if (DllName && !(dll_unquoted =
remove_quotes(DllName)))
return 1;
1104
1105 ReturnCode = 1;
1106 if(FunctionInstall)
1107 {
1110 else
1111 {
1114 {
1117 }
1118 }
1119 }
1120 else if(FunctionRepair)
1121 {
1123 WINE_FIXME(
"Product code treatment not implemented yet\n");
1124 else
1125 {
1128 {
1131 }
1132 }
1133 }
1134 else if(FunctionAdvertise)
1135 {
1138 }
1139 else if(FunctionPatch)
1140 {
1141 ReturnCode =
MsiApplyPatchW(patch_unquoted, package_unquoted, InstallType, Properties);
1142 }
1143 else if(FunctionDllRegisterServer)
1144 {
1146 }
1147 else if(FunctionDllUnregisterServer)
1148 {
1150 }
1151 else if (FunctionRegServer)
1152 {
1154 }
1155 else if (FunctionUnregServer)
1156 {
1158 }
1159 else if (FunctionServer)
1160 {
1162 }
1163 else if (FunctionUnknown)
1164 {
1165 WINE_FIXME(
"Unknown function, ignoring\n" );
1166 }
1167 else
1169
1170 return ReturnCode;
1171}
VOID WINAPI InitCommonControls(void)
LPWSTR WINAPI GetCommandLineW(void)
UINT WINAPI MsiConfigureProductExW(LPCWSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState, LPCWSTR szCommandLine)
UINT WINAPI MsiEnableLogW(DWORD dwLogMode, const WCHAR *szLogFile, DWORD attributes)
UINT WINAPI MsiInstallProductW(LPCWSTR szPackagePath, LPCWSTR szCommandLine)
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
UINT WINAPI MsiAdvertiseProductW(LPCWSTR szPackagePath, LPCWSTR szScriptfilePath, LPCWSTR szTransforms, LANGID lgidLanguage)
UINT WINAPI MsiApplyPatchW(LPCWSTR szPatchPackage, LPCWSTR szInstallPackage, INSTALLTYPE eInstallType, LPCWSTR szCommandLine)
UINT WINAPI MsiReinstallProductW(const WCHAR *szProduct, DWORD dwReinstallMode)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define ERROR_FILE_NOT_FOUND
enum tagINSTALLTYPE INSTALLTYPE
@ INSTALLLOGATTRIBUTES_FLUSHEACHLINE
@ INSTALLLOGATTRIBUTES_APPEND
@ ADVERTISEFLAGS_USERASSIGN
@ ADVERTISEFLAGS_MACHINEASSIGN
@ INSTALLLOGMODE_ACTIONDATA
@ INSTALLLOGMODE_ACTIONSTART
@ INSTALLLOGMODE_FATALEXIT
@ INSTALLLOGMODE_PROPERTYDUMP
@ INSTALLLOGMODE_RESOLVESOURCE
@ INSTALLLOGMODE_COMMONDATA
@ INSTALLLOGMODE_INITIALIZE
@ INSTALLLOGMODE_TERMINATE
@ INSTALLLOGMODE_OUTOFDISKSPACE
@ INSTALLLOGMODE_PROGRESS
@ INSTALLLOGMODE_SHOWDIALOG
@ INSTALLTYPE_NETWORK_IMAGE
@ REINSTALLMODE_MACHINEDATA
@ REINSTALLMODE_FILEREPLACE
@ REINSTALLMODE_FILEOLDERVERSION
@ REINSTALLMODE_FILEEXACT
@ REINSTALLMODE_FILEEQUALVERSION
@ REINSTALLMODE_FILEVERIFY
@ REINSTALLMODE_FILEMISSING
enum tagINSTALLUILEVEL INSTALLUILEVEL
@ INSTALLUILEVEL_ENDDIALOG
@ INSTALLUILEVEL_HIDECANCEL
@ INSTALLUILEVEL_PROGRESSONLY
static BOOL IsProductCode(LPWSTR str)
static DWORD DoUnregServer(void)
static DWORD DoDllRegisterServer(LPCWSTR DllName)
static void ShowUsage(int ExitCode)
static LPWSTR build_transforms(struct string_list *transform_list)
static int custom_action_server(const WCHAR *arg)
static LPWSTR build_properties(struct string_list *property_list)
static WCHAR * get_path_with_extension(const WCHAR *package_name)
static BOOL msi_option_prefix(LPCWSTR str1, LPCSTR str2)
static VOID StringListAppend(struct string_list **list, LPCWSTR str)
static WCHAR * remove_quotes(const WCHAR *filename)
static BOOL msi_option_equal(LPCWSTR str1, LPCSTR str2)
static DWORD DoDllUnregisterServer(LPCWSTR DllName)
static DWORD DoRegServer(void)
static BOOL process_args_from_reg(const WCHAR *ident, int *pargc, WCHAR ***pargv)
static DWORD msi_atou(LPCWSTR str)