632{
640 BOOL FunctionDllUnregisterServer =
FALSE;
645
649
650 DWORD RepairMode = 0;
651
655
658 DWORD LogAttributes = 0;
659
662
664
670
672
673
675
676
677
678
679
680
681
683 {
685 return 1;
686 }
687
690
692 {
694
696 {
697 FunctionRegServer =
TRUE;
698 }
701 {
702 FunctionUnregServer =
TRUE;
703 }
705 {
708 FunctionInstall =
TRUE;
710 argvWi += argLen;
711 else
712 {
718 }
719 PackageName = argvWi;
720 }
722 {
723 FunctionInstall =
TRUE;
724 FunctionInstallAdmin =
TRUE;
730 PackageName = argvW[
i];
732 WINE_FIXME(
"Administrative installs are not currently supported\n");
733 }
735 {
738 FunctionRepair =
TRUE;
740 {
742 {
743 case 'P':
744 case 'p':
746 break;
747 case 'O':
748 case 'o':
750 break;
751 case 'E':
752 case 'e':
754 break;
755 case 'D':
756 case 'd':
758 break;
759 case 'C':
760 case 'c':
762 break;
763 case 'A':
764 case 'a':
766 break;
767 case 'U':
768 case 'u':
770 break;
771 case 'M':
772 case 'm':
774 break;
775 case 'S':
776 case 's':
778 break;
779 case 'V':
780 case 'v':
782 break;
783 default:
784 report_error(
"Unknown option \"%c\" in Repair mode\n", argvW[
i][
j]);
785 break;
786 }
787 }
789 {
795 }
800 PackageName = argvW[
i];
801 }
803 {
804 FunctionInstall =
TRUE;
806 if(!PackageName || !PackageName[0])
807 {
811 PackageName = argvW[
i];
812 }
815 }
817 {
820 FunctionAdvertise =
TRUE;
822 {
824 {
825 case 'U':
826 case 'u':
828 break;
829 case 'M':
830 case 'm':
832 break;
833 default:
834 report_error(
"Unknown option \"%c\" in Advertise mode\n", argvW[
i][
j]);
835 break;
836 }
837 }
842 PackageName = argvW[
i];
843 }
845 {
846 FunctionAdvertise =
TRUE;
852 PackageName = argvW[
i];
853 }
855 {
856 FunctionAdvertise =
TRUE;
862 PackageName = argvW[
i];
863 }
865 {
871 }
873 {
879 }
881 {
885 {
887 {
888 case 'I':
889 case 'i':
891 break;
892 case 'W':
893 case 'w':
895 break;
896 case 'E':
897 case 'e':
899 break;
900 case 'A':
901 case 'a':
903 break;
904 case 'R':
905 case 'r':
907 break;
908 case 'U':
909 case 'u':
911 break;
912 case 'C':
913 case 'c':
915 break;
916 case 'M':
917 case 'm':
919 break;
920 case 'O':
921 case 'o':
923 break;
924 case 'P':
925 case 'p':
927 break;
928 case 'V':
929 case 'v':
931 break;
932 case '*':
948 break;
949 case '+':
951 break;
952 case '!':
954 break;
955 default:
956 break;
957 }
958 }
965 {
969 }
970 }
972 {
973 FunctionPatch =
TRUE;
978 PatchFileName = argvW[
i];
979 }
981 {
984 {
987 }
989 {
991 }
993 {
995 }
997 {
999 }
1001 {
1003
1005
1007 {
1013 {
1016 }
1018 }
1019 }
1020 else
1021 {
1024 }
1025 }
1027 {
1030 }
1032 {
1033 FunctionDllRegisterServer =
TRUE;
1039 }
1041 {
1042 FunctionDllUnregisterServer =
TRUE;
1048 }
1050 {
1052 }
1054 {
1055 FunctionUnknown =
TRUE;
1057 }
1059 {
1060 FunctionUnknown =
TRUE;
1062 }
1064 {
1065 FunctionServer =
TRUE;
1066 }
1067 else
1069 }
1070
1071
1073
1075
1076 if(FunctionInstallAdmin && FunctionPatch)
1077 FunctionInstall =
FALSE;
1078
1079 ReturnCode = 1;
1080 if(FunctionInstall)
1081 {
1084 else
1085 {
1088 {
1091 }
1092 }
1093 }
1094 else if(FunctionRepair)
1095 {
1097 WINE_FIXME(
"Product code treatment not implemented yet\n");
1098 else
1099 {
1102 {
1105 }
1106 }
1107 }
1108 else if(FunctionAdvertise)
1109 {
1112 }
1113 else if(FunctionPatch)
1114 {
1115 ReturnCode =
MsiApplyPatchW(PatchFileName, PackageName, InstallType, Properties);
1116 }
1117 else if(FunctionDllRegisterServer)
1118 {
1120 }
1121 else if(FunctionDllUnregisterServer)
1122 {
1124 }
1125 else if (FunctionRegServer)
1126 {
1128 }
1129 else if (FunctionUnregServer)
1130 {
1132 }
1133 else if (FunctionServer)
1134 {
1136 }
1137 else if (FunctionUnknown)
1138 {
1139 WINE_FIXME(
"Unknown function, ignoring\n" );
1140 }
1141 else
1143
1144 return ReturnCode;
1145}
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 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)
_Must_inspect_result_ _In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PUNICODE_STRING LogFileName