Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
2c0e46d9
Commit
2c0e46d9
authored
Jan 19, 2005
by
Aric Stewart
Committed by
Alexandre Julliard
Jan 19, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Do a very basic first implementation of MsiConfigureProductExW for
msiexec /@ when run as a reboot. Also add a number of new stubs for the office xp and 2k3 install and startup process.
parent
b2d79634
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
146 additions
and
8 deletions
+146
-8
msi.c
dlls/msi/msi.c
+141
-3
msi.spec
dlls/msi/msi.spec
+5
-5
No files found.
dlls/msi/msi.c
View file @
2c0e46d9
...
...
@@ -588,7 +588,105 @@ UINT WINAPI MsiApplyPatchW(LPCWSTR szPatchPackage, LPCWSTR szInstallPackage, INS
return
ERROR_CALL_NOT_IMPLEMENTED
;
}
UINT
WINAPI
MsiConfigureProductA
(
LPCSTR
szProduct
,
int
iInstallLevel
,
INSTALLSTATE
eInstallState
)
UINT
WINAPI
MsiConfigureProductExW
(
LPCWSTR
szProduct
,
int
iInstallLevel
,
INSTALLSTATE
eInstallState
,
LPCWSTR
szCommandLine
)
{
MSIHANDLE
handle
;
MSIPACKAGE
*
package
;
UINT
rc
;
WCHAR
squished_pc
[
0x100
];
HKEY
hkey
=
0
,
hkey2
=
0
,
hkey3
=
0
,
hkey4
=
0
;
static
const
WCHAR
szInstaller
[]
=
{
'S'
,
'o'
,
'f'
,
't'
,
'w'
,
'a'
,
'r'
,
'e'
,
'\\'
,
'M'
,
'i'
,
'c'
,
'r'
,
'o'
,
's'
,
'o'
,
'f'
,
't'
,
'\\'
,
'I'
,
'n'
,
's'
,
't'
,
'a'
,
'l'
,
'l'
,
'e'
,
'r'
,
0
};
static
const
WCHAR
szProducts
[]
=
{
'P'
,
'r'
,
'o'
,
'd'
,
'u'
,
'c'
,
't'
,
's'
,
0
};
DWORD
sz
;
static
const
WCHAR
szSouceList
[]
=
{
'S'
,
'o'
,
'u'
,
'r'
,
'c'
,
'e'
,
'L'
,
'i'
,
's'
,
't'
,
0
};
static
const
WCHAR
szLUS
[]
=
{
'L'
,
'a'
,
's'
,
't'
,
'U'
,
's'
,
'e'
,
'd'
,
'S'
,
'o'
,
'u'
,
'r'
,
'c'
,
'e'
,
0
};
WCHAR
sourcepath
[
0x200
];
static
const
WCHAR
szInstalled
[]
=
{
' '
,
'I'
,
'n'
,
's'
,
't'
,
'a'
,
'l'
,
'l'
,
'e'
,
'd'
,
'='
,
'1'
,
0
};
LPWSTR
commandline
;
FIXME
(
"%s %d %d %s
\n
"
,
debugstr_w
(
szProduct
),
iInstallLevel
,
eInstallState
,
debugstr_w
(
szCommandLine
));
if
(
eInstallState
!=
INSTALLSTATE_LOCAL
)
{
FIXME
(
"Not implemented for anything other than local installs
\n
"
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
}
squash_guid
(
szProduct
,
squished_pc
);
TRACE
(
"squished (%s)
\n
"
,
debugstr_w
(
squished_pc
));
rc
=
RegOpenKeyW
(
HKEY_CURRENT_USER
,
szInstaller
,
&
hkey
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
/* check the products key for the product */
rc
=
RegOpenKeyW
(
hkey
,
szProducts
,
&
hkey2
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
rc
=
RegOpenKeyW
(
hkey2
,
squished_pc
,
&
hkey3
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
rc
=
RegOpenKeyW
(
hkey3
,
szSouceList
,
&
hkey4
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
sz
=
sizeof
(
sourcepath
);
rc
=
RegQueryValueExW
(
hkey4
,
szLUS
,
NULL
,
NULL
,(
LPBYTE
)
sourcepath
,
&
sz
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
/*
* ok 1, we need to find the msi file for this product.
* 2, find the source dir for the files
* 3, do the configure/install.
4, cleanupany runonce entry.
*/
rc
=
MsiOpenProductW
(
szProduct
,
&
handle
);
if
(
rc
!=
ERROR_SUCCESS
)
goto
end
;
package
=
msihandle2msiinfo
(
handle
,
MSIHANDLETYPE_PACKAGE
);
sz
=
strlenW
(
szInstalled
);
if
(
szCommandLine
)
sz
+=
strlenW
(
szCommandLine
);
commandline
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
*
sizeof
(
WCHAR
));
if
(
szCommandLine
)
strcpyW
(
commandline
,
szCommandLine
);
else
commandline
[
0
]
=
0
;
if
(
MsiQueryProductStateW
(
szProduct
)
==
iInstallLevel
)
strcatW
(
commandline
,
szInstalled
);
rc
=
ACTION_DoTopLevelINSTALL
(
package
,
sourcepath
,
commandline
);
HeapFree
(
GetProcessHeap
(),
0
,
commandline
);
end:
RegCloseKey
(
hkey3
);
RegCloseKey
(
hkey2
);
RegCloseKey
(
hkey
);
return
rc
;
}
UINT
WINAPI
MsiConfigureProductA
(
LPCSTR
szProduct
,
int
iInstallLevel
,
INSTALLSTATE
eInstallState
)
{
LPWSTR
szwProduct
=
NULL
;
UINT
hr
=
ERROR_SUCCESS
;
...
...
@@ -613,10 +711,13 @@ end:
return
hr
;
}
UINT
WINAPI
MsiConfigureProductW
(
LPCWSTR
szProduct
,
int
iInstallLevel
,
INSTALLSTATE
eInstallState
)
UINT
WINAPI
MsiConfigureProductW
(
LPCWSTR
szProduct
,
int
iInstallLevel
,
INSTALLSTATE
eInstallState
)
{
FIXME
(
"%s %d %d
\n
"
,
debugstr_w
(
szProduct
),
iInstallLevel
,
eInstallState
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
return
MsiConfigureProductExW
(
szProduct
,
iInstallLevel
,
eInstallState
,
NULL
);
}
UINT
WINAPI
MsiGetProductCodeA
(
LPCSTR
szComponent
,
LPSTR
szBuffer
)
...
...
@@ -1783,3 +1884,40 @@ UINT WINAPI MsiGetFeatureUsageA(LPCSTR szProduct, LPCSTR szFeature,
pdwUseCount
,
pwDateUsed
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
}
UINT
WINAPI
MsiUseFeatureExW
(
LPCWSTR
szProduct
,
LPCWSTR
szFeature
,
DWORD
dwInstallMode
,
DWORD
dwReserved
)
{
FIXME
(
"%s %s %li %li
\n
"
,
debugstr_w
(
szProduct
),
debugstr_w
(
szFeature
),
dwInstallMode
,
dwReserved
);
return
INSTALLSTATE_LOCAL
;
}
UINT
WINAPI
MsiProvideQualifiedComponentExW
(
LPCWSTR
szComponent
,
LPCWSTR
szQualifier
,
DWORD
dwInstallMode
,
LPWSTR
szProduct
,
DWORD
Unused1
,
DWORD
Unused2
,
LPWSTR
lpPathBuf
,
DWORD
*
pcchPathBuf
)
{
FIXME
(
"%s %s %li %s %li %li %p %p
\n
"
,
debugstr_w
(
szComponent
),
debugstr_w
(
szQualifier
),
dwInstallMode
,
debugstr_w
(
szProduct
),
Unused1
,
Unused2
,
lpPathBuf
,
pcchPathBuf
);
return
ERROR_INDEX_ABSENT
;
}
UINT
WINAPI
MsiGetUserInfoW
(
LPCWSTR
szProduct
,
LPWSTR
lpUserNameBuf
,
DWORD
*
pcchUserNameBuf
,
LPWSTR
lpOrgNameBuf
,
DWORD
*
pcchOrgNameBuf
,
LPWSTR
lpSerialBuf
,
DWORD
*
pcchSerialBuf
)
{
FIXME
(
"%s, %p %p %p %p %p %p
\n
"
,
debugstr_w
(
szProduct
),
lpUserNameBuf
,
pcchUserNameBuf
,
lpOrgNameBuf
,
pcchOrgNameBuf
,
lpSerialBuf
,
pcchSerialBuf
);
return
USERINFOSTATE_UNKNOWN
;
}
UINT
WINAPI
MsiCollectUserInfoW
(
LPWSTR
szProduct
)
{
FIXME
(
"%s
\n
"
,
debugstr_w
(
szProduct
));
return
ERROR_FUNCTION_FAILED
;
}
dlls/msi/msi.spec
View file @
2c0e46d9
...
...
@@ -7,7 +7,7 @@
7 stdcall MsiCloseAllHandles()
8 stdcall MsiCloseHandle(long)
9 stub MsiCollectUserInfoA
10 st
ub MsiCollectUserInfoW
10 st
dcall MsiCollectUserInfoW(wstr)
11 stub MsiConfigureFeatureA
12 stub MsiConfigureFeatureFromDescriptorA
13 stub MsiConfigureFeatureFromDescriptorW
...
...
@@ -79,7 +79,7 @@
79 stdcall MsiGetTargetPathA(long str ptr ptr)
80 stdcall MsiGetTargetPathW(long wstr ptr ptr)
81 stub MsiGetUserInfoA
82 st
ub MsiGetUserInfoW
82 st
dcall MsiGetUserInfoW(wstr ptr ptr ptr ptr ptr ptr)
83 stub MsiInstallMissingComponentA
84 stub MsiInstallMissingComponentW
85 stub MsiInstallMissingFileA
...
...
@@ -187,10 +187,10 @@
187 stub MsiQueryFeatureStateFromDescriptorA
188 stub MsiQueryFeatureStateFromDescriptorW
189 stub MsiConfigureProductExA
190 st
ub MsiConfigureProductExW
190 st
dcall MsiConfigureProductExW (wstr long long wstr)
191 stub MsiInvalidateFeatureCache
192 stub MsiUseFeatureExA
193 st
ub MsiUseFeatureExW
193 st
dcall MsiUseFeatureExW(wstr wstr long long)
194 stdcall MsiGetFileVersionA(str str ptr str ptr)
195 stdcall MsiGetFileVersionW(wstr wstr ptr wstr ptr)
196 stdcall MsiLoadStringA(long long long long long)
...
...
@@ -200,7 +200,7 @@
200 stub MsiDecomposeDescriptorA
201 stub MsiDecomposeDescriptorW
202 stub MsiProvideQualifiedComponentExA
203 st
ub MsiProvideQualifiedComponentExW
203 st
dcall MsiProvideQualifiedComponentExW(wstr wstr long wstr long long ptr ptr)
204 stdcall MsiEnumRelatedProductsA(str long long ptr)
205 stdcall MsiEnumRelatedProductsW(wstr long long ptr)
206 stub MsiSetFeatureAttributesA
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment