22 #define WIN32_LEAN_AND_MEAN 31 #include "wine/unicode.h" 47 'A',
'C',
'T',
'I',
'O',
'N',
'=',
'A',
'D',
'M',
'I',
'N',0 };
49 'R',
'E',
'M',
'O',
'V',
'E',
'=',
'A',
'L',
'L',0 };
52 'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
53 'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
54 'W',
'i',
'n',
'd',
'o',
'w',
's',
'\\',
55 'C',
'u',
'r',
'r',
'e',
'n',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'\\',
56 'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'r',
'\\',
57 'R',
'u',
'n',
'O',
'n',
'c',
'e',
'E',
'n',
't',
'r',
'i',
'e',
's',0};
61 WCHAR msiexec_version[40];
75 len =
sizeof(msiexec_version) /
sizeof(msiexec_version[0]);
79 WINE_ERR(
"MsiGetFileVersion failed with %d\n",
res);
87 if (msi_res && msiexec_help) {
91 sprintfW(msiexec_help, msi_res, msiexec_version);
210 while(*
str >=
'0' && *
str <=
'9')
240 if (str1[0] !=
'/' && str1[0] !=
'-')
268 if (str1[0] !=
'/' && str1[0] !=
'-')
303 pfDllRegisterServer =
LoadProc(DllName,
"DllRegisterServer", &DllHandle);
305 hr = pfDllRegisterServer();
323 pfDllUnregisterServer =
LoadProc(DllName,
"DllUnregisterServer", &DllHandle);
325 hr = pfDllUnregisterServer();
339 static const WCHAR msiserverW[] = {
'M',
'S',
'I',
'S',
'e',
'r',
'v',
'e',
'r',0};
340 static const WCHAR msiexecW[] = {
'\\',
'm',
's',
'i',
'e',
'x',
'e',
'c',
' ',
'/',
'V',0};
341 SC_HANDLE scm, service;
347 fprintf(
stderr,
"Failed to open the service control manager.\n");
369 static const WCHAR msiserverW[] = {
'M',
'S',
'I',
'S',
'e',
'r',
'v',
'e',
'r',0};
370 SC_HANDLE scm, service;
398 printf(
"Remote custom actions are not supported yet\n");
420 for (
p =
in; *
p;
p++)
452 if (
p >
in &&
p[-1] ==
'"')
550 BOOL FunctionDllUnregisterServer =
FALSE;
560 DWORD RepairMode = 0;
568 DWORD LogAttributes = 0;
604 FunctionRegServer =
TRUE;
609 FunctionUnregServer =
TRUE;
615 FunctionInstall =
TRUE;
626 PackageName = argvWi;
630 FunctionInstall =
TRUE;
631 FunctionInstallAdmin =
TRUE;
637 PackageName = argvW[
i];
639 WINE_FIXME(
"Administrative installs are not currently supported\n");
645 FunctionRepair =
TRUE;
691 fprintf(
stderr,
"Unknown option \"%c\" in Repair mode\n", argvW[
i][
j]);
707 PackageName = argvW[
i];
711 FunctionInstall =
TRUE;
713 if(!PackageName || !PackageName[0])
718 PackageName = argvW[
i];
727 FunctionAdvertise =
TRUE;
741 fprintf(
stderr,
"Unknown option \"%c\" in Advertise mode\n", argvW[
i][
j]);
749 PackageName = argvW[
i];
753 FunctionAdvertise =
TRUE;
759 PackageName = argvW[
i];
763 FunctionAdvertise =
TRUE;
769 PackageName = argvW[
i];
880 FunctionPatch =
TRUE;
885 PatchFileName = argvW[
i];
934 static const WCHAR rebootpromptW[] =
935 {
'R',
'E',
'B',
'O',
'O',
'T',
'P',
'R',
'O',
'M',
'P',
'T',
'=',
'"',
'S',
'"',0};
942 FunctionDllRegisterServer =
TRUE;
951 FunctionDllUnregisterServer =
TRUE;
964 FunctionUnknown =
TRUE;
969 FunctionUnknown =
TRUE;
974 FunctionServer =
TRUE;
985 if(FunctionInstallAdmin && FunctionPatch)
986 FunctionInstall =
FALSE;
996 else if(FunctionRepair)
999 WINE_FIXME(
"Product code treatment not implemented yet\n");
1003 else if(FunctionAdvertise)
1008 else if(FunctionPatch)
1010 ReturnCode =
MsiApplyPatchW(PatchFileName, PackageName, InstallType, Properties);
1012 else if(FunctionDllRegisterServer)
1016 else if(FunctionDllUnregisterServer)
1020 else if (FunctionRegServer)
1024 else if (FunctionUnregServer)
1028 else if (FunctionServer)
1032 else if (FunctionUnknown)
1034 WINE_FIXME(
"Unknown function, ignoring\n" );
static BOOL process_args_from_reg(const WCHAR *ident, int *pargc, WCHAR ***pargv)
static void process_args(WCHAR *cmdline, int *pargc, WCHAR ***pargv)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
struct string_list * next
#define SERVICE_ERROR_NORMAL
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
#define SC_MANAGER_CONNECT
enum tagINSTALLUILEVEL INSTALLUILEVEL
SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, LPCWSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword)
GLdouble GLdouble GLdouble r
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
char * wine_dbgstr_w(const wchar_t *wstr)
int ignore(int trapCode, ppc_trap_frame_t *trap)
GLuint GLuint GLsizei count
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
UINT WINAPI MsiInstallProductW(LPCWSTR szPackagePath, LPCWSTR szCommandLine)
static INT DoEmbedding(LPWSTR key)
static const WCHAR ActionAdmin[]
VOID WINAPI ExitProcess(IN UINT uExitCode)
DWORD WINAPI GetLastError(VOID)
static LPWSTR build_transforms(struct string_list *transform_list)
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
#define LOAD_WITH_ALTERED_SEARCH_PATH
BOOL WINAPI DeleteService(SC_HANDLE hService)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
UINT WINAPI MsiApplyPatchW(LPCWSTR szPatchPackage, LPCWSTR szInstallPackage, INSTALLTYPE eInstallType, LPCWSTR szCommandLine)
static DWORD DoDllUnregisterServer(LPCWSTR DllName)
UINT WINAPI MsiAdvertiseProductW(LPCWSTR szPackagePath, LPCWSTR szScriptfilePath, LPCWSTR szTransforms, LANGID lgidLanguage)
GLenum GLuint GLenum GLsizei const GLchar * buf
LONG WINAPI RegCloseKey(HKEY hKey)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
UINT WINAPI MsiEnableLogW(DWORD dwLogMode, LPCWSTR szLogFile, DWORD attributes)
LPWSTR WINAPI GetCommandLineW(VOID)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
static BOOL msi_option_prefix(LPCWSTR str1, LPCSTR str2)
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
UINT WINAPI MsiConfigureProductExW(LPCWSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState, LPCWSTR szCommandLine)
static DWORD DoUnregServer(void)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
HRESULT(WINAPI * DLLREGISTERSERVER)(void)
static DWORD msi_atou(LPCWSTR str)
#define SC_MANAGER_CREATE_SERVICE
static VOID * LoadProc(LPCWSTR DllName, LPCSTR ProcName, HMODULE *DllHandle)
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
_In_ ULONG _In_ ULONG_PTR ident
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
UINT WINAPI MsiGetFileVersionW(LPCWSTR path, LPWSTR verbuf, LPDWORD verlen, LPWSTR langbuf, LPDWORD langlen)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static const WCHAR InstallRunOnce[]
static DWORD DoRegServer(void)
static const WCHAR RemoveAll[]
UINT WINAPI MsiReinstallProductW(LPCWSTR szProduct, DWORD dwReinstallMode)
static VOID StringListAppend(struct string_list **list, LPCWSTR str)
_Must_inspect_result_ _In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PUNICODE_STRING LogFileName
#define SERVICE_WIN32_SHARE_PROCESS
#define SERVICES_ACTIVE_DATABASEW
#define ERROR_SERVICE_EXISTS
static BOOL msi_option_equal(LPCWSTR str1, LPCSTR str2)
WINE_DEFAULT_DEBUG_CHANNEL(msiexec)
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
static BOOL msi_strequal(LPCWSTR str1, LPCSTR str2)
#define memcpy(s1, s2, n)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
GLsizei const GLfloat * value
static void ShowUsage(int ExitCode)
UINT WINAPI MsiMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, WORD wLanguageId, DWORD f)
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 i
static BOOL IsProductCode(LPWSTR str)
static DWORD DoDllRegisterServer(LPCWSTR DllName)
#define FIELD_OFFSET(t, f)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
#define MultiByteToWideChar
#define ERROR_SERVICE_DOES_NOT_EXIST
enum tagINSTALLTYPE INSTALLTYPE
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
static int chomp(const WCHAR *in, WCHAR *out)
#define GetProcAddress(x, y)
LANGID WINAPI GetUserDefaultLangID(void)
GLuint GLuint GLsizei GLenum type
HRESULT(WINAPI * DLLUNREGISTERSERVER)(void)
#define SERVICE_DEMAND_START
static LPWSTR build_properties(struct string_list *property_list)
static BOOL msi_strprefix(LPCWSTR str1, LPCSTR str2)
#define HeapFree(x, y, z)
LCID WINAPI GetThreadLocale(void)
#define HKEY_LOCAL_MACHINE