mirror of
https://github.com/reactos/reactos.git
synced 2025-05-04 18:31:40 +00:00
sync msi with wine 1.1.27
svn path=/trunk/; revision=42507
This commit is contained in:
parent
522d088b11
commit
50ba99e99c
30 changed files with 233 additions and 72 deletions
|
@ -851,6 +851,7 @@ static UINT HANDLE_CustomType23(MSIPACKAGE *package, LPCWSTR source,
|
|||
msi_custom_action_info *info;
|
||||
WCHAR package_path[MAX_PATH];
|
||||
DWORD size;
|
||||
UINT r;
|
||||
|
||||
static const WCHAR backslash[] = {'\\',0};
|
||||
|
||||
|
@ -863,7 +864,9 @@ static UINT HANDLE_CustomType23(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCAConcurrentInstall(package, type, package_path, target, action);
|
||||
|
||||
return wait_thread_handle(info);
|
||||
r = wait_thread_handle(info);
|
||||
release_custom_action_data( info );
|
||||
return r;
|
||||
}
|
||||
|
||||
static UINT HANDLE_CustomType1(MSIPACKAGE *package, LPCWSTR source,
|
||||
|
@ -888,7 +891,9 @@ static UINT HANDLE_CustomType1(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCustomActionTypeDll( package, type, tmp_file, target, action );
|
||||
|
||||
return wait_thread_handle( info );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
return r;
|
||||
}
|
||||
|
||||
static UINT HANDLE_CustomType2(MSIPACKAGE *package, LPCWSTR source,
|
||||
|
@ -951,6 +956,7 @@ static UINT HANDLE_CustomType17(MSIPACKAGE *package, LPCWSTR source,
|
|||
{
|
||||
msi_custom_action_info *info;
|
||||
MSIFILE *file;
|
||||
UINT r;
|
||||
|
||||
TRACE("%s %s\n", debugstr_w(source), debugstr_w(target));
|
||||
|
||||
|
@ -963,7 +969,9 @@ static UINT HANDLE_CustomType17(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCustomActionTypeDll( package, type, file->TargetPath, target, action );
|
||||
|
||||
return wait_thread_handle( info );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
return r;
|
||||
}
|
||||
|
||||
static UINT HANDLE_CustomType18(MSIPACKAGE *package, LPCWSTR source,
|
||||
|
@ -1167,9 +1175,7 @@ static DWORD ACTION_CallScript( const GUID *guid )
|
|||
else
|
||||
ERR("failed to create handle for %p\n", info->package );
|
||||
|
||||
if (info->type & msidbCustomActionTypeAsync &&
|
||||
info->type & msidbCustomActionTypeContinue)
|
||||
release_custom_action_data( info );
|
||||
release_custom_action_data( info );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -1226,13 +1232,16 @@ static msi_custom_action_info *do_msidbCustomActionTypeScript(
|
|||
static UINT HANDLE_CustomType37_38(MSIPACKAGE *package, LPCWSTR source,
|
||||
LPCWSTR target, const INT type, LPCWSTR action)
|
||||
{
|
||||
UINT r;
|
||||
msi_custom_action_info *info;
|
||||
|
||||
TRACE("%s %s\n", debugstr_w(source), debugstr_w(target));
|
||||
|
||||
info = do_msidbCustomActionTypeScript( package, type, target, NULL, action );
|
||||
|
||||
return wait_thread_handle( info );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
return r;
|
||||
}
|
||||
|
||||
static UINT HANDLE_CustomType5_6(MSIPACKAGE *package, LPCWSTR source,
|
||||
|
@ -1277,6 +1286,7 @@ static UINT HANDLE_CustomType5_6(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCustomActionTypeScript( package, type, bufferw, target, action );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
|
||||
done:
|
||||
msi_free(bufferw);
|
||||
|
@ -1341,6 +1351,7 @@ static UINT HANDLE_CustomType21_22(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCustomActionTypeScript( package, type, bufferw, target, action );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
|
||||
done:
|
||||
msi_free(bufferw);
|
||||
|
@ -1353,6 +1364,7 @@ static UINT HANDLE_CustomType53_54(MSIPACKAGE *package, LPCWSTR source,
|
|||
{
|
||||
msi_custom_action_info *info;
|
||||
WCHAR *prop;
|
||||
UINT r;
|
||||
|
||||
TRACE("%s %s\n", debugstr_w(source), debugstr_w(target));
|
||||
|
||||
|
@ -1362,7 +1374,9 @@ static UINT HANDLE_CustomType53_54(MSIPACKAGE *package, LPCWSTR source,
|
|||
|
||||
info = do_msidbCustomActionTypeScript( package, type, prop, NULL, action );
|
||||
msi_free(prop);
|
||||
return wait_thread_handle( info );
|
||||
r = wait_thread_handle( info );
|
||||
release_custom_action_data( info );
|
||||
return r;
|
||||
}
|
||||
|
||||
void ACTION_FinishCustomActions(const MSIPACKAGE* package)
|
||||
|
|
|
@ -41,11 +41,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(msi);
|
||||
|
||||
DEFINE_GUID( CLSID_MsiDatabase, 0x000c1084, 0x0000, 0x0000,
|
||||
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
DEFINE_GUID( CLSID_MsiPatch, 0x000c1086, 0x0000, 0x0000,
|
||||
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
|
||||
/*
|
||||
* .MSI file format
|
||||
*
|
||||
|
@ -163,7 +158,8 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
|
|||
}
|
||||
|
||||
if ( !IsEqualGUID( &stat.clsid, &CLSID_MsiDatabase ) &&
|
||||
!IsEqualGUID( &stat.clsid, &CLSID_MsiPatch ) )
|
||||
!IsEqualGUID( &stat.clsid, &CLSID_MsiPatch ) &&
|
||||
!IsEqualGUID( &stat.clsid, &CLSID_MsiTransform ) )
|
||||
{
|
||||
ERR("storage GUID is not a MSI database GUID %s\n",
|
||||
debugstr_guid(&stat.clsid) );
|
||||
|
@ -417,10 +413,16 @@ static LPWSTR msi_build_createsql_columns(LPWSTR *columns_data, LPWSTR *types, D
|
|||
case 'i':
|
||||
lstrcpyW(extra, type_notnull);
|
||||
case 'I':
|
||||
if (len == 2)
|
||||
if (len <= 2)
|
||||
type = type_int;
|
||||
else
|
||||
else if (len == 4)
|
||||
type = type_long;
|
||||
else
|
||||
{
|
||||
WARN("invalid int width %u\n", len);
|
||||
msi_free(columns);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
lstrcpyW(extra, type_notnull);
|
||||
|
|
|
@ -171,7 +171,7 @@ static HWND hMsiHiddenWindow;
|
|||
|
||||
static INT msi_dialog_scale_unit( msi_dialog *dialog, INT val )
|
||||
{
|
||||
return (dialog->scale * val + 5) / 10;
|
||||
return MulDiv( val, dialog->scale, 12 );
|
||||
}
|
||||
|
||||
static msi_control *msi_dialog_find_control( msi_dialog *dialog, LPCWSTR name )
|
||||
|
@ -417,7 +417,7 @@ static msi_control *msi_dialog_create_window( msi_dialog *dialog,
|
|||
return NULL;
|
||||
|
||||
strcpyW( control->name, name );
|
||||
list_add_head( &dialog->controls, &control->entry );
|
||||
list_add_tail( &dialog->controls, &control->entry );
|
||||
control->handler = NULL;
|
||||
control->update = NULL;
|
||||
control->property = NULL;
|
||||
|
@ -2911,7 +2911,7 @@ static INT msi_dialog_get_sans_serif_height( HWND hwnd )
|
|||
if (hdc)
|
||||
{
|
||||
memset( &lf, 0, sizeof lf );
|
||||
lf.lfHeight = MulDiv(10, GetDeviceCaps(hdc, LOGPIXELSY), 72);
|
||||
lf.lfHeight = MulDiv(12, GetDeviceCaps(hdc, LOGPIXELSY), 72);
|
||||
strcpyW( lf.lfFaceName, szSansSerif );
|
||||
hFont = CreateFontIndirectW(&lf);
|
||||
if (hFont)
|
||||
|
@ -3002,37 +3002,34 @@ static void msi_dialog_adjust_dialog_pos( msi_dialog *dialog, MSIRECORD *rec, LP
|
|||
AdjustWindowRect( pos, style, FALSE );
|
||||
}
|
||||
|
||||
static BOOL msi_control_set_next( msi_control *control, msi_control *next )
|
||||
static void msi_dialog_set_tab_order( msi_dialog *dialog, LPCWSTR first )
|
||||
{
|
||||
return SetWindowPos( next->hwnd, control->hwnd, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW |
|
||||
SWP_NOREPOSITION | SWP_NOSENDCHANGING | SWP_NOSIZE );
|
||||
}
|
||||
struct list tab_chain;
|
||||
msi_control *control;
|
||||
HWND prev = HWND_TOP;
|
||||
|
||||
static UINT msi_dialog_set_tab_order( msi_dialog *dialog )
|
||||
{
|
||||
msi_control *control, *tab_next;
|
||||
list_init( &tab_chain );
|
||||
if (!(control = msi_dialog_find_control( dialog, first ))) return;
|
||||
|
||||
LIST_FOR_EACH_ENTRY( control, &dialog->controls, msi_control, entry )
|
||||
dialog->hWndFocus = control->hwnd;
|
||||
while (control)
|
||||
{
|
||||
tab_next = msi_dialog_find_control( dialog, control->tabnext );
|
||||
if( !tab_next )
|
||||
continue;
|
||||
msi_control_set_next( control, tab_next );
|
||||
list_remove( &control->entry );
|
||||
list_add_tail( &tab_chain, &control->entry );
|
||||
if (!control->tabnext) break;
|
||||
control = msi_dialog_find_control( dialog, control->tabnext );
|
||||
}
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
LIST_FOR_EACH_ENTRY( control, &tab_chain, msi_control, entry )
|
||||
{
|
||||
SetWindowPos( control->hwnd, prev, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW |
|
||||
SWP_NOREPOSITION | SWP_NOSENDCHANGING | SWP_NOSIZE );
|
||||
prev = control->hwnd;
|
||||
}
|
||||
|
||||
static void msi_dialog_set_first_control( msi_dialog* dialog, LPCWSTR name )
|
||||
{
|
||||
msi_control *control;
|
||||
|
||||
control = msi_dialog_find_control( dialog, name );
|
||||
if( control )
|
||||
dialog->hWndFocus = control->hwnd;
|
||||
else
|
||||
dialog->hWndFocus = NULL;
|
||||
/* put them back on the main list */
|
||||
list_move_head( &dialog->controls, &tab_chain );
|
||||
}
|
||||
|
||||
static LRESULT msi_dialog_oncreate( HWND hwnd, LPCREATESTRUCTW cs )
|
||||
|
@ -3082,8 +3079,7 @@ static LRESULT msi_dialog_oncreate( HWND hwnd, LPCREATESTRUCTW cs )
|
|||
msi_dialog_build_font_list( dialog );
|
||||
msi_dialog_fill_controls( dialog );
|
||||
msi_dialog_evaluate_control_conditions( dialog );
|
||||
msi_dialog_set_tab_order( dialog );
|
||||
msi_dialog_set_first_control( dialog, MSI_RecordGetString( rec, 8 ) );
|
||||
msi_dialog_set_tab_order( dialog, MSI_RecordGetString( rec, 8 ) );
|
||||
msiobj_release( &rec->hdr );
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -38,6 +38,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
#include "msi_Hu.rc"
|
||||
#include "msi_It.rc"
|
||||
#include "msi_Ko.rc"
|
||||
#include "msi_Lt.rc"
|
||||
#include "msi_Nl.rc"
|
||||
#include "msi_No.rc"
|
||||
#include "msi_Pl.rc"
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,17 +18,23 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
4 "The specified installation package could not be opened. Please check the file path and try again."
|
||||
4 "Le paquet d'installation spécifié n'a pu être ouvert. Veuillez vérifier le chemin du fichier et réessayer."
|
||||
5 "Le chemin %s est introuvable"
|
||||
9 "insérez le disque %s"
|
||||
10 "mauvais paramètres"
|
||||
9 "insérez le disque %s"
|
||||
10 "mauvais paramètres"
|
||||
11 "saisissez le nom du dossier contenant %s"
|
||||
12 "source d'installation pour la fonctionnalité manquante"
|
||||
13 "lecteur réseau pour la fonctionnalité manquant"
|
||||
14 "fonctionnalité depuis:"
|
||||
15 "sélectionnez le dossier contenant %s"
|
||||
12 "source d'installation pour la fonctionnalité manquante"
|
||||
13 "lecteur réseau pour la fonctionnalité manquante"
|
||||
14 "fonctionnalité depuis :"
|
||||
15 "sélectionnez le dossier contenant %s"
|
||||
}
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
40
reactos/dll/win32/msi/msi_Lt.rc
Normal file
40
reactos/dll/win32/msi/msi_Lt.rc
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Lithuanian resources for MSI
|
||||
*
|
||||
* Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
4 "Nepavyko atverti nurodyto diegimo paketo. Patikrinkite failo kelią ir mėginkite dar kartą."
|
||||
5 "kelias %s nerastas"
|
||||
9 "įdėkite diską %s"
|
||||
10 "blogi parametrai"
|
||||
11 "įveskite aplanką, kuris turi %s"
|
||||
12 "trūksta diegimo šaltinio komponentui"
|
||||
13 "trūksta tinklo disko komponentui"
|
||||
14 "komponentas iš:"
|
||||
15 "parinkite aplanką, kuris turi %s"
|
||||
}
|
||||
#pragma code_page(default)
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
@ -33,5 +35,4 @@ STRINGTABLE DISCARDABLE
|
|||
14 "caracteristică de la:"
|
||||
15 "selectați fișierul care conține %s"
|
||||
}
|
||||
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -18,17 +18,23 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
4 "Указанный пакет не может быть открыт. Проверьте файл и повторите попытку."
|
||||
5 "путь %s не найден"
|
||||
9 "вставьте диск %s"
|
||||
10 "неверные параметры"
|
||||
11 "укажите каталог, содержащий %s"
|
||||
12 "источник установки данной возможности не указан"
|
||||
13 "сетевой диск для данной возможности не указан"
|
||||
14 "возможность из:"
|
||||
15 "выберите каталог, содержащий %s"
|
||||
4 "Указанный пакет не может быть открыт. Проверьте файл и повторите попытку."
|
||||
5 "путь %s не найден"
|
||||
9 "вставьте диск %s"
|
||||
10 "неверные параметры"
|
||||
11 "укажите каталог, содержащий %s"
|
||||
12 "источник установки данной возможности не указан"
|
||||
13 "сетевой диск для данной возможности не указан"
|
||||
14 "возможность из:"
|
||||
15 "выберите каталог, содержащий %s"
|
||||
}
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
|
||||
|
@ -34,5 +36,4 @@ STRINGTABLE DISCARDABLE
|
|||
14 "funkcija z:"
|
||||
15 "izberite mapo, ki vsebuje %s"
|
||||
}
|
||||
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
/* Chinese text is encoded in UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
|
@ -50,5 +52,3 @@ STRINGTABLE DISCARDABLE
|
|||
14 "功能來自:"
|
||||
15 "選擇包含 %s 的檔案夾"
|
||||
}
|
||||
|
||||
#pragma code_page(default)
|
||||
|
|
|
@ -605,6 +605,10 @@ DEFINE_GUID(CLSID_IMsiServerMessage, 0x000C101D,0x0000,0x0000,0xC0,0x00,0x00,0x0
|
|||
DEFINE_GUID(CLSID_IWineMsiRemoteCustomAction,0xBA26E6FA,0x4F27,0x4f56,0x95,0x3A,0x3F,0x90,0x27,0x20,0x18,0xAA);
|
||||
DEFINE_GUID(CLSID_IWineMsiRemotePackage,0x902b3592,0x9d08,0x4dfd,0xa5,0x93,0xd0,0x7c,0x52,0x54,0x64,0x21);
|
||||
|
||||
DEFINE_GUID(CLSID_MsiTransform, 0x000c1082,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
DEFINE_GUID(CLSID_MsiDatabase, 0x000c1084,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
DEFINE_GUID(CLSID_MsiPatch, 0x000c1086,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
|
||||
/* handle unicode/ascii output in the Msi* API functions */
|
||||
typedef struct {
|
||||
BOOL unicode;
|
||||
|
|
|
@ -716,8 +716,6 @@ MSIHANDLE WINAPI MsiGetLastErrorRecord( void )
|
|||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_GUID( CLSID_MsiTransform, 0x000c1082, 0x0000, 0x0000, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||
|
||||
UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db,
|
||||
LPCWSTR szTransformFile, int iErrorCond )
|
||||
{
|
||||
|
|
|
@ -424,4 +424,4 @@ library WindowsInstaller
|
|||
properties:
|
||||
methods:
|
||||
}
|
||||
}
|
||||
}
|
|
@ -121,16 +121,23 @@ static void table_calc_column_offsets( MSIDATABASE *db, MSICOLUMNINFO *colinfo,
|
|||
static UINT get_tablecolumns( MSIDATABASE *db,
|
||||
LPCWSTR szTableName, MSICOLUMNINFO *colinfo, UINT *sz);
|
||||
static void msi_free_colinfo( MSICOLUMNINFO *colinfo, UINT count );
|
||||
static UINT table_find_insert_idx (MSIVIEW *view, LPCWSTR name, INT *pidx);
|
||||
|
||||
static inline UINT bytes_per_column( MSIDATABASE *db, const MSICOLUMNINFO *col )
|
||||
{
|
||||
if( MSITYPE_IS_BINARY(col->type) )
|
||||
return 2;
|
||||
|
||||
if( col->type & MSITYPE_STRING )
|
||||
return db->bytes_per_strref;
|
||||
if( (col->type & 0xff) > 4 )
|
||||
|
||||
if( (col->type & 0xff) <= 2)
|
||||
return 2;
|
||||
|
||||
if( (col->type & 0xff) != 4 )
|
||||
ERR("Invalid column size!\n");
|
||||
return col->type & 0xff;
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
||||
static int utf2mime(int x)
|
||||
|
@ -620,6 +627,7 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
|
|||
column_info *col;
|
||||
MSITABLE *table;
|
||||
UINT i;
|
||||
INT idx;
|
||||
|
||||
/* only add tables that don't exist already */
|
||||
if( TABLE_Exists(db, name ) )
|
||||
|
@ -685,7 +693,11 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
|
|||
if( r )
|
||||
goto err;
|
||||
|
||||
r = tv->ops->insert_row( tv, rec, -1, persistent == MSICONDITION_FALSE );
|
||||
r = table_find_insert_idx (tv, name, &idx);
|
||||
if (r != ERROR_SUCCESS)
|
||||
idx = -1;
|
||||
|
||||
r = tv->ops->insert_row( tv, rec, idx, persistent == MSICONDITION_FALSE );
|
||||
TRACE("insert_row returned %x\n", r);
|
||||
if( r )
|
||||
goto err;
|
||||
|
@ -735,7 +747,11 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
|
|||
if( r )
|
||||
goto err;
|
||||
|
||||
r = tv->ops->insert_row( tv, rec, -1, FALSE );
|
||||
r = table_find_insert_idx (tv, name, &idx);
|
||||
if (r != ERROR_SUCCESS)
|
||||
idx = -1;
|
||||
|
||||
r = tv->ops->insert_row( tv, rec, idx, FALSE );
|
||||
if( r )
|
||||
goto err;
|
||||
|
||||
|
@ -1701,6 +1717,21 @@ static UINT msi_table_update(struct tagMSIVIEW *view, MSIRECORD *rec, UINT row)
|
|||
return TABLE_set_row(view, new_row, rec, (1 << tv->num_cols) - 1);
|
||||
}
|
||||
|
||||
static UINT msi_table_assign(struct tagMSIVIEW *view, MSIRECORD *rec)
|
||||
{
|
||||
MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
|
||||
UINT r, row;
|
||||
|
||||
if (!tv->table)
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
r = msi_table_find_row(tv, rec, &row);
|
||||
if (r == ERROR_SUCCESS)
|
||||
return TABLE_set_row(view, row, rec, (1 << tv->num_cols) - 1);
|
||||
else
|
||||
return TABLE_insert_row( view, rec, -1, FALSE );
|
||||
}
|
||||
|
||||
static UINT modify_delete_row( struct tagMSIVIEW *view, MSIRECORD *rec )
|
||||
{
|
||||
MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
|
||||
|
@ -1770,6 +1801,9 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
|
|||
break;
|
||||
|
||||
case MSIMODIFY_ASSIGN:
|
||||
r = msi_table_assign( view, rec );
|
||||
break;
|
||||
|
||||
case MSIMODIFY_REPLACE:
|
||||
case MSIMODIFY_MERGE:
|
||||
case MSIMODIFY_VALIDATE:
|
||||
|
@ -2923,3 +2957,29 @@ void msi_free_transforms( MSIDATABASE *db )
|
|||
msi_free( t );
|
||||
}
|
||||
}
|
||||
|
||||
static UINT table_find_insert_idx (MSIVIEW *view, LPCWSTR name, INT *pidx)
|
||||
{
|
||||
UINT r, name_id, row_id;
|
||||
INT idx;
|
||||
MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
|
||||
|
||||
TRACE ("%p %s\n", view, debugstr_w(name));
|
||||
|
||||
r = msi_string2idW(tv->db->strings, name, &name_id);
|
||||
if (r != ERROR_SUCCESS)
|
||||
{
|
||||
*pidx = -1;
|
||||
return r;
|
||||
}
|
||||
|
||||
for( idx = 0; idx < tv->table->row_count; idx++ )
|
||||
{
|
||||
r = TABLE_fetch_int( &tv->view, idx, 1, &row_id );
|
||||
if (row_id > name_id)
|
||||
break;
|
||||
}
|
||||
|
||||
*pidx = idx;
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue