James Hawkins : msi: Publish a few SourceList properties.
Alexandre Julliard
julliard at winehq.org
Thu Feb 21 07:42:35 CST 2008
Module: wine
Branch: master
Commit: 3de0014750eb9d96baef59aacfcbfef83e1e1ef2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3de0014750eb9d96baef59aacfcbfef83e1e1ef2
Author: James Hawkins <jhawkins at codeweavers.com>
Date: Thu Feb 21 00:02:46 2008 -0600
msi: Publish a few SourceList properties.
---
dlls/msi/action.c | 41 ++++++++++++++++++++++++++++++++++++++++-
dlls/msi/tests/install.c | 37 +++++++++++--------------------------
2 files changed, 51 insertions(+), 27 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 2efcbbb..432496b 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -3389,12 +3389,16 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
HKEY hkey=0;
HKEY hukey=0;
HKEY hudkey=0, props=0;
+ HKEY source;
static const WCHAR szProductLanguage[] =
{'P','r','o','d','u','c','t','L','a','n','g','u','a','g','e',0};
static const WCHAR szARPProductIcon[] =
{'A','R','P','P','R','O','D','U','C','T','I','C','O','N',0};
static const WCHAR szProductVersion[] =
{'P','r','o','d','u','c','t','V','e','r','s','i','o','n',0};
+ static const WCHAR szSourceList[] =
+ {'S','o','u','r','c','e','L','i','s','t',0};
+ static const WCHAR szEmpty[] = {0};
DWORD langid;
LPWSTR buffer;
DWORD size;
@@ -3423,6 +3427,12 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
if (rc != ERROR_SUCCESS)
goto end;
+ rc = RegCreateKeyW(hukey, szSourceList, &source);
+ if (rc != ERROR_SUCCESS)
+ goto end;
+
+ RegCloseKey(source);
+
rc = MSIREG_OpenUserDataProductKey(package->ProductCode,&hudkey,TRUE);
if (rc != ERROR_SUCCESS)
goto end;
@@ -3454,7 +3464,36 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
msi_reg_set_val_dword( hkey, INSTALLPROPERTY_VERSIONW, verdword );
}
msi_free(buffer);
-
+
+ buffer = strrchrW( package->PackagePath, '\\') + 1;
+ rc = MsiSourceListSetInfoW( package->ProductCode, NULL,
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT,
+ INSTALLPROPERTY_PACKAGENAMEW, buffer );
+ if (rc != ERROR_SUCCESS)
+ goto end;
+
+ rc = MsiSourceListSetInfoW( package->ProductCode, NULL,
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT,
+ INSTALLPROPERTY_MEDIAPACKAGEPATHW, szEmpty );
+ if (rc != ERROR_SUCCESS)
+ goto end;
+
+ rc = MsiSourceListSetInfoW( package->ProductCode, NULL,
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT,
+ INSTALLPROPERTY_DISKPROMPTW, szEmpty );
+ if (rc != ERROR_SUCCESS)
+ goto end;
+
+ buffer = msi_dup_property( package, cszSourceDir );
+
+ rc = MsiSourceListSetInfoW( package->ProductCode, NULL,
+ MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSICODE_PRODUCT | MSISOURCETYPE_NETWORK,
+ INSTALLPROPERTY_LASTUSEDSOURCEW, buffer );
+ msi_free(buffer);
+ if (rc != ERROR_SUCCESS)
+ goto end;
+
/* FIXME: Need to write more keys to the user registry */
hDb= alloc_msihandle( &package->db->hdr );
diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c
index bb87cd1..1fbb6ee 100644
--- a/dlls/msi/tests/install.c
+++ b/dlls/msi/tests/install.c
@@ -2990,12 +2990,9 @@ static void test_publishsourcelist(void)
lstrcpyA(value, "aaa");
r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size);
- todo_wine
- {
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
- ok(size == 11, "Expected 11, got %d\n", size);
- }
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
+ ok(size == 11, "Expected 11, got %d\n", size);
size = MAX_PATH;
lstrcpyA(value, "aaa");
@@ -3012,12 +3009,9 @@ static void test_publishsourcelist(void)
lstrcpyA(value, "aaa");
r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPT, value, &size);
- todo_wine
- {
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
- ok(size == 0, "Expected 0, got %d\n", size);
- }
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value);
+ ok(size == 0, "Expected 0, got %d\n", size);
lstrcpyA(path, CURR_DIR);
lstrcatA(path, "\\");
@@ -3048,10 +3042,7 @@ static void test_publishsourcelist(void)
lstrcpyA(value, "aaa");
r = MsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size);
- todo_wine
- {
- ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
- }
+ ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value);
ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size);
@@ -3059,21 +3050,15 @@ static void test_publishsourcelist(void)
lstrcpyA(value, "aaa");
r = MsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size);
- todo_wine
- {
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(value, path), "Expected \"%s\", got \"%s\"\n", path, value);
- ok(size == lstrlenA(path), "Expected %d, got %d\n", lstrlenA(path), size);
- }
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(value, path), "Expected \"%s\", got \"%s\"\n", path, value);
+ ok(size == lstrlenA(path), "Expected %d, got %d\n", lstrlenA(path), size);
size = MAX_PATH;
lstrcpyA(value, "aaa");
r = MsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 1, value, &size);
- todo_wine
- {
- ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
- }
+ ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value);
ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size);
More information about the wine-cvs
mailing list