617{
625 BOOL FunctionDllUnregisterServer =
FALSE;
630
634
635 DWORD RepairMode = 0;
636
640
643 DWORD LogAttributes = 0;
644
647
649
655
657
658
660
661
662
663
664
665
666
668 {
670 return 1;
671 }
672
675
677 {
679
681 {
682 FunctionRegServer =
TRUE;
683 }
686 {
687 FunctionUnregServer =
TRUE;
688 }
690 {
693 FunctionInstall =
TRUE;
695 argvWi += argLen;
696 else
697 {
703 }
704 PackageName = argvWi;
705 }
707 {
708 FunctionInstall =
TRUE;
709 FunctionInstallAdmin =
TRUE;
715 PackageName = argvW[
i];
717 WINE_FIXME(
"Administrative installs are not currently supported\n");
718 }
720 {
723 FunctionRepair =
TRUE;
725 {
727 {
728 case 'P':
729 case 'p':
731 break;
732 case 'O':
733 case 'o':
735 break;
736 case 'E':
737 case 'e':
739 break;
740 case 'D':
741 case 'd':
743 break;
744 case 'C':
745 case 'c':
747 break;
748 case 'A':
749 case 'a':
751 break;
752 case 'U':
753 case 'u':
755 break;
756 case 'M':
757 case 'm':
759 break;
760 case 'S':
761 case 's':
763 break;
764 case 'V':
765 case 'v':
767 break;
768 default:
769 fprintf(
stderr,
"Unknown option \"%c\" in Repair mode\n", argvW[
i][
j]);
770 break;
771 }
772 }
774 {
780 }
785 PackageName = argvW[
i];
786 }
788 {
789 FunctionInstall =
TRUE;
791 if(!PackageName || !PackageName[0])
792 {
796 PackageName = argvW[
i];
797 }
800 }
802 {
805 FunctionAdvertise =
TRUE;
807 {
809 {
810 case 'U':
811 case 'u':
813 break;
814 case 'M':
815 case 'm':
817 break;
818 default:
819 fprintf(
stderr,
"Unknown option \"%c\" in Advertise mode\n", argvW[
i][
j]);
820 break;
821 }
822 }
827 PackageName = argvW[
i];
828 }
830 {
831 FunctionAdvertise =
TRUE;
837 PackageName = argvW[
i];
838 }
840 {
841 FunctionAdvertise =
TRUE;
847 PackageName = argvW[
i];
848 }
850 {
856 }
858 {
864 }
866 {
870 {
872 {
873 case 'I':
874 case 'i':
876 break;
877 case 'W':
878 case 'w':
880 break;
881 case 'E':
882 case 'e':
884 break;
885 case 'A':
886 case 'a':
888 break;
889 case 'R':
890 case 'r':
892 break;
893 case 'U':
894 case 'u':
896 break;
897 case 'C':
898 case 'c':
900 break;
901 case 'M':
902 case 'm':
904 break;
905 case 'O':
906 case 'o':
908 break;
909 case 'P':
910 case 'p':
912 break;
913 case 'V':
914 case 'v':
916 break;
917 case '*':
933 break;
934 case '+':
936 break;
937 case '!':
939 break;
940 default:
941 break;
942 }
943 }
950 {
954 }
955 }
957 {
958 FunctionPatch =
TRUE;
963 PatchFileName = argvW[
i];
964 }
966 {
969 {
971 }
973 {
975 }
977 {
979 }
981 {
983 }
985 {
987
989
991 {
997 {
1000 }
1002 }
1003 }
1004 else
1005 {
1008 }
1009 }
1011 {
1014 }
1016 {
1017 FunctionDllRegisterServer =
TRUE;
1023 }
1025 {
1026 FunctionDllUnregisterServer =
TRUE;
1032 }
1034 {
1036 }
1038 {
1039 FunctionUnknown =
TRUE;
1041 }
1043 {
1044 FunctionUnknown =
TRUE;
1046 }
1048 {
1049 FunctionServer =
TRUE;
1050 }
1051 else
1053 }
1054
1055
1057
1059
1060 if(FunctionInstallAdmin && FunctionPatch)
1061 FunctionInstall =
FALSE;
1062
1063 ReturnCode = 1;
1064 if(FunctionInstall)
1065 {
1068 else
1069 {
1072 {
1075 }
1076 }
1077 }
1078 else if(FunctionRepair)
1079 {
1081 WINE_FIXME(
"Product code treatment not implemented yet\n");
1082 else
1083 {
1086 {
1089 }
1090 }
1091 }
1092 else if(FunctionAdvertise)
1093 {
1096 }
1097 else if(FunctionPatch)
1098 {
1099 ReturnCode =
MsiApplyPatchW(PatchFileName, PackageName, InstallType, Properties);
1100 }
1101 else if(FunctionDllRegisterServer)
1102 {
1104 }
1105 else if(FunctionDllUnregisterServer)
1106 {
1108 }
1109 else if (FunctionRegServer)
1110 {
1112 }
1113 else if (FunctionUnregServer)
1114 {
1116 }
1117 else if (FunctionServer)
1118 {
1120 }
1121 else if (FunctionUnknown)
1122 {
1123 WINE_FIXME(
"Unknown function, ignoring\n" );
1124 }
1125 else
1127
1128 return ReturnCode;
1129}
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