Commit 3033daec authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

msi: Implement UI messages for dialogs.

parent 5da92503
......@@ -158,15 +158,17 @@ static const WCHAR szValidateProductID[] =
static const WCHAR szWriteEnvironmentStrings[] =
{'W','r','i','t','e','E','n','v','i','r','o','n','m','e','n','t','S','t','r','i','n','g','s',0};
static void ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template)
static INT ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template)
{
MSIRECORD *row = MSI_CreateRecord(3);
if (!row) return;
INT rc;
if (!row) return -1;
MSI_RecordSetStringW(row, 1, action);
MSI_RecordSetStringW(row, 2, description);
MSI_RecordSetStringW(row, 3, template);
MSI_ProcessMessage(package, INSTALLMESSAGE_ACTIONSTART, row);
rc = MSI_ProcessMessage(package, INSTALLMESSAGE_ACTIONSTART, row);
msiobj_release(&row->hdr);
return rc;
}
static void ui_actioninfo(MSIPACKAGE *package, LPCWSTR action, BOOL start,
......@@ -608,22 +610,26 @@ static UINT ACTION_ProcessUISequence(MSIPACKAGE *package)
/********************************************************
* ACTION helper functions and functions that perform the actions
*******************************************************/
static BOOL ACTION_HandleCustomAction( MSIPACKAGE *package, LPCWSTR action, UINT *rc, UINT script )
static UINT ACTION_HandleCustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script)
{
BOOL ret=FALSE;
UINT arc;
INT uirc;
ui_actionstart(package, action, NULL, NULL);
uirc = ui_actionstart(package, action, NULL, NULL);
if (uirc == IDCANCEL)
return ERROR_INSTALL_USEREXIT;
ui_actioninfo(package, action, TRUE, 0);
arc = ACTION_CustomAction( package, action, script );
if (arc == ERROR_FUNCTION_NOT_CALLED && needs_ui_sequence(package))
arc = ACTION_ShowDialog(package, action);
if (arc == ERROR_INSTALL_USEREXIT) /* dialog UI returned -1 */
return ERROR_SUCCESS;
ui_actioninfo(package, action, FALSE, arc);
if (arc != ERROR_CALL_NOT_IMPLEMENTED)
{
*rc = arc;
ret = TRUE;
}
return ret;
return arc;
}
MSICOMPONENT *msi_get_loaded_component( MSIPACKAGE *package, const WCHAR *Component )
......@@ -7771,9 +7777,9 @@ StandardActions[] =
{ 0 }
};
static BOOL ACTION_HandleStandardAction( MSIPACKAGE *package, LPCWSTR action, UINT *rc )
static UINT ACTION_HandleStandardAction(MSIPACKAGE *package, LPCWSTR action)
{
BOOL ret = FALSE;
UINT rc = ERROR_FUNCTION_NOT_CALLED;
UINT i;
i = 0;
......@@ -7792,8 +7798,8 @@ static BOOL ACTION_HandleStandardAction( MSIPACKAGE *package, LPCWSTR action, UI
if (StandardActions[i].handler)
{
ui_actioninfo( package, action, TRUE, 0 );
*rc = StandardActions[i].handler( package );
ui_actioninfo( package, action, FALSE, *rc );
rc = StandardActions[i].handler( package );
ui_actioninfo( package, action, FALSE, rc );
if (StandardActions[i].action_rollback && !package->need_rollback)
{
......@@ -7804,58 +7810,46 @@ static BOOL ACTION_HandleStandardAction( MSIPACKAGE *package, LPCWSTR action, UI
else
{
FIXME("unhandled standard action %s\n", debugstr_w(action));
*rc = ERROR_SUCCESS;
rc = ERROR_SUCCESS;
}
ret = TRUE;
break;
}
i++;
}
return ret;
return rc;
}
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script)
{
UINT rc = ERROR_SUCCESS;
BOOL handled;
UINT rc;
TRACE("Performing action (%s)\n", debugstr_w(action));
handled = ACTION_HandleStandardAction(package, action, &rc);
rc = ACTION_HandleStandardAction(package, action);
if (!handled)
handled = ACTION_HandleCustomAction(package, action, &rc, script);
if (rc == ERROR_FUNCTION_NOT_CALLED)
rc = ACTION_HandleCustomAction(package, action, script);
if (!handled)
{
if (rc == ERROR_FUNCTION_NOT_CALLED)
WARN("unhandled msi action %s\n", debugstr_w(action));
rc = ERROR_FUNCTION_NOT_CALLED;
}
return rc;
}
UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action, UINT script)
{
UINT rc = ERROR_SUCCESS;
BOOL handled = FALSE;
UINT rc;
TRACE("Performing action (%s)\n", debugstr_w(action));
package->action_progress_increment = 0;
handled = ACTION_HandleStandardAction(package, action, &rc);
if (!handled)
handled = ACTION_HandleCustomAction(package, action, &rc, script);
rc = ACTION_HandleStandardAction(package, action);
if( !handled && ACTION_DialogBox(package, action) == ERROR_SUCCESS )
handled = TRUE;
if (rc == ERROR_FUNCTION_NOT_CALLED)
rc = ACTION_HandleCustomAction(package, action, script);
if (!handled)
{
if (rc == ERROR_FUNCTION_NOT_CALLED)
WARN("unhandled msi action %s\n", debugstr_w(action));
rc = ERROR_FUNCTION_NOT_CALLED;
}
return rc;
}
......
......@@ -1215,7 +1215,7 @@ UINT ACTION_CustomAction( MSIPACKAGE *package, LPCWSTR action, UINT script )
row = MSI_QueryGetRecord( package->db, query, action );
if (!row)
return ERROR_CALL_NOT_IMPLEMENTED;
return ERROR_FUNCTION_NOT_CALLED;
type = MSI_RecordGetInteger(row,2);
source = MSI_RecordGetString(row,3);
......
......@@ -30,7 +30,6 @@
#include "winuser.h"
#include "winnls.h"
#include "msi.h"
#include "msipriv.h"
#include "msidefs.h"
#include "ocidl.h"
#include "olectl.h"
......@@ -38,12 +37,15 @@
#include "commctrl.h"
#include "winreg.h"
#include "shlwapi.h"
#include "msiserver.h"
#include "shellapi.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "msipriv.h"
#include "msiserver.h"
#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(msi);
extern HINSTANCE msi_hInstance;
......@@ -4505,6 +4507,44 @@ static UINT event_reset( msi_dialog *dialog, const WCHAR *argument )
return ERROR_SUCCESS;
}
UINT ACTION_ShowDialog( MSIPACKAGE *package, const WCHAR *dialog )
{
static const WCHAR szDialog[] = {'D','i','a','l','o','g',0};
MSIRECORD *row;
INT rc;
if (!TABLE_Exists(package->db, szDialog)) return ERROR_FUNCTION_NOT_CALLED;
row = MSI_CreateRecord(0);
if (!row) return ERROR_OUTOFMEMORY;
MSI_RecordSetStringW(row, 0, dialog);
rc = MSI_ProcessMessage(package, INSTALLMESSAGE_SHOWDIALOG, row);
msiobj_release(&row->hdr);
if (rc == -1) return ERROR_INSTALL_USEREXIT;
if (!rc)
{
static const WCHAR szActionNotFound[] =
{'D','E','B','U','G',':',' ','E','r','r','o','r',' ','[','1',']',':',' ',' ',
'A','c','t','i','o','n',' ','n','o','t',' ','f','o','u','n','d',':',' ','[','2',']',0};
WCHAR template[1024];
MSIRECORD *row = MSI_CreateRecord(2);
if (!row) return -1;
MSI_RecordSetStringW(row, 0, szActionNotFound); /* FIXME: this shouldn't attach "Info [1]." */
MSI_RecordSetInteger(row, 1, 2726);
MSI_RecordSetStringW(row, 2, dialog);
MSI_ProcessMessage(package, INSTALLMESSAGE_INFO, row);
LoadStringW(msi_hInstance, IDS_INSTALLERROR, template, 1024);
MSI_RecordSetStringW(row, 0, template);
MSI_ProcessMessage(package, INSTALLMESSAGE_INFO, row);
msiobj_release(&row->hdr);
return ERROR_FUNCTION_NOT_CALLED;
}
return ERROR_SUCCESS;
}
/* Return ERROR_SUCCESS if dialog is process and ERROR_FUNCTION_FAILED
* if the given parameter is not a dialog box
*/
......@@ -4533,6 +4573,17 @@ UINT ACTION_DialogBox( MSIPACKAGE *package, const WCHAR *dialog )
msi_free( name );
}
if (r == ERROR_IO_PENDING) r = ERROR_SUCCESS;
if (r == ERROR_SUCCESS)
{
static const WCHAR szDialogCreated[] =
{'D','i','a','l','o','g',' ','c','r','e','a','t','e','d',0};
MSIRECORD *row = MSI_CreateRecord(2);
if (!row) return ERROR_OUTOFMEMORY;
MSI_RecordSetStringW(row, 1, dialog);
MSI_RecordSetStringW(row, 2, szDialogCreated);
MSI_ProcessMessage(package, INSTALLMESSAGE_ACTIONSTART, row);
msiobj_release(&row->hdr);
}
return r;
}
......
......@@ -72,12 +72,13 @@ STRINGTABLE
IDS_COMMONDATA "Message type: [1], Argument: [2]{, [3]}"
}
/* INSTALLMESSAGE_INFO strings */
/* Install message template strings */
STRINGTABLE
{
IDS_INFO_ACTIONSTART "Action start %s: [1]."
IDS_INFO_ACTIONENDED "Action ended %s: [1]. Return value [2]."
IDS_INFO_LOGGINGSTART "=== Logging started: %s %s ==="
IDS_INSTALLERROR "The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}"
}
/* Standard action description strings */
......
......@@ -800,6 +800,7 @@ extern void msi_free_patchinfo( MSIPATCHINFO *patch ) DECLSPEC_HIDDEN;
/* action internals */
extern UINT MSI_InstallPackage( MSIPACKAGE *, LPCWSTR, LPCWSTR ) DECLSPEC_HIDDEN;
extern UINT ACTION_ShowDialog( MSIPACKAGE*, LPCWSTR) DECLSPEC_HIDDEN;
extern UINT ACTION_DialogBox( MSIPACKAGE*, LPCWSTR) DECLSPEC_HIDDEN;
extern UINT ACTION_ForceReboot(MSIPACKAGE *package) DECLSPEC_HIDDEN;
extern UINT MSI_Sequence( MSIPACKAGE *package, LPCWSTR szTable ) DECLSPEC_HIDDEN;
......
......@@ -1788,6 +1788,13 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
case INSTALLMESSAGE_INITIALIZE:
case INSTALLMESSAGE_TERMINATE:
return 0;
case INSTALLMESSAGE_SHOWDIALOG:
{
LPWSTR dialog = msi_dup_record_field(record, 0);
UINT rc = ACTION_DialogBox(package, dialog);
msi_free(dialog);
return (rc == ERROR_SUCCESS);
}
case INSTALLMESSAGE_ACTIONSTART:
{
LPWSTR deformatted;
......
......@@ -23,6 +23,7 @@
#define IDS_INFO_ACTIONSTART 1050
#define IDS_INFO_ACTIONENDED 1051
#define IDS_INFO_LOGGINGSTART 1052
#define IDS_INSTALLERROR 1053
#define IDS_DESC_ALLOCATEREGISTRYSPACE 1100
#define IDS_DESC_APPSEARCH 1101
......
......@@ -642,6 +642,42 @@ static UINT create_custom_action_table( MSIHANDLE hdb )
"PRIMARY KEY `Action`)" );
}
static UINT create_dialog_table( MSIHANDLE hdb )
{
return run_query(hdb,
"CREATE TABLE `Dialog` ("
"`Dialog` CHAR(72) NOT NULL, "
"`HCentering` SHORT NOT NULL, "
"`VCentering` SHORT NOT NULL, "
"`Width` SHORT NOT NULL, "
"`Height` SHORT NOT NULL, "
"`Attributes` LONG, "
"`Title` CHAR(128) LOCALIZABLE, "
"`Control_First` CHAR(50) NOT NULL, "
"`Control_Default` CHAR(50), "
"`Control_Cancel` CHAR(50) "
"PRIMARY KEY `Dialog`)");
}
static UINT create_control_table( MSIHANDLE hdb )
{
return run_query(hdb,
"CREATE TABLE `Control` ("
"`Dialog_` CHAR(72) NOT NULL, "
"`Control` CHAR(50) NOT NULL, "
"`Type` CHAR(20) NOT NULL, "
"`X` SHORT NOT NULL, "
"`Y` SHORT NOT NULL, "
"`Width` SHORT NOT NULL, "
"`Height` SHORT NOT NULL, "
"`Attributes` LONG, "
"`Property` CHAR(50), "
"`Text` CHAR(0) LOCALIZABLE, "
"`Control_Next` CHAR(50), "
"`Help` CHAR(255) LOCALIZABLE "
"PRIMARY KEY `Dialog_`, `Control`)");
}
#define make_add_entry(type, qtext) \
static UINT add##_##type##_##entry( MSIHANDLE hdb, const char *values ) \
{ \
......@@ -9330,6 +9366,40 @@ static const struct externalui_message doaction_custom_sequence[] = {
{0}
};
static const struct externalui_message doaction_custom_fullui_sequence[] = {
{INSTALLMESSAGE_ACTIONSTART, 3, {"", "custom", "", ""}, {0, 1, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "custom", ""}, {0, 1, 1}},
{INSTALLMESSAGE_SHOWDIALOG, 0, {"custom"}, {1}},
{INSTALLMESSAGE_INFO, 2, {"", "custom", "1"}, {0, 1, 1}},
{0}
};
static const struct externalui_message doaction_dialog_nonexistent_sequence[] = {
{INSTALLMESSAGE_ACTIONSTART, 3, {"", "custom", "", ""}, {0, 1, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "custom", "1"}, {0, 1, 1}},
{INSTALLMESSAGE_SHOWDIALOG, 0, {"custom"}, {1}},
{INSTALLMESSAGE_INFO, 2, {"DEBUG: Error [1]: Action not found: [2]", "2726", "custom"}, {1, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "2726", "custom"}, {0, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "custom", "0"}, {0, 1, 1}},
{0}
};
static const struct externalui_message doaction_dialog_sequence[] = {
{INSTALLMESSAGE_ACTIONSTART, 3, {"", "dialog", "", ""}, {0, 1, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "dialog", "0"}, {0, 1, 1}},
{INSTALLMESSAGE_SHOWDIALOG, 0, {"dialog"}, {1}},
{INSTALLMESSAGE_ACTIONSTART, 2, {"", "dialog", "Dialog created"}, {0, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "dialog", "1"}, {0, 1, 1}},
{0}
};
static const struct externalui_message doaction_dialog_error_sequence[] = {
{INSTALLMESSAGE_ACTIONSTART, 3, {"", "error", "", ""}, {0, 1, 1, 1}},
{INSTALLMESSAGE_INFO, 2, {"", "error", "1"}, {0, 1, 1}},
{INSTALLMESSAGE_SHOWDIALOG, 0, {"error"}, {1}},
{0}
};
static const struct externalui_message closehandle_sequence[] = {
{INSTALLMESSAGE_TERMINATE, -1},
{0}
......@@ -9337,6 +9407,7 @@ static const struct externalui_message closehandle_sequence[] = {
static INT CALLBACK externalui_message_string_callback(void *context, UINT message, LPCSTR string)
{
INT retval = context ? *((INT *)context) : 0;
struct externalui_message msg;
msg.message = message;
......@@ -9344,11 +9415,12 @@ static INT CALLBACK externalui_message_string_callback(void *context, UINT messa
strcpy(msg.field[0], string);
add_message(&msg);
return 1;
return retval;
}
static INT CALLBACK externalui_message_callback(void *context, UINT message, MSIHANDLE hrecord)
{
INT retval = context ? *((INT *)context) : 0;
struct externalui_message msg;
char buffer[100];
DWORD length = 100;
......@@ -9372,7 +9444,7 @@ static INT CALLBACK externalui_message_callback(void *context, UINT message, MSI
add_message(&msg);
return 1;
return retval;
}
static void test_externalui_message(void)
......@@ -9381,11 +9453,14 @@ static void test_externalui_message(void)
INSTALLUI_HANDLER_RECORD prev;
MSIHANDLE hdb, hpkg;
INT retval = 1;
UINT r;
MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL);
/* processing SHOWDIALOG with a record handler causes a crash on XP */
MsiSetExternalUIA(externalui_message_string_callback, INSTALLLOGMODE_SHOWDIALOG, NULL);
r = pMsiSetExternalUIRecord(externalui_message_callback, 0xffffffff ^ INSTALLLOGMODE_PROGRESS ^ INSTALLLOGMODE_SHOWDIALOG, NULL, &prev);
MsiSetExternalUIA(externalui_message_string_callback, INSTALLLOGMODE_SHOWDIALOG, &retval);
r = pMsiSetExternalUIRecord(externalui_message_callback, 0xffffffff ^ INSTALLLOGMODE_PROGRESS ^ INSTALLLOGMODE_SHOWDIALOG, &retval, &prev);
flush_sequence();
......@@ -9430,6 +9505,53 @@ static void test_externalui_message(void)
MsiCloseHandle(hpkg);
ok_sequence(closehandle_sequence, "MsiCloseHandle()", FALSE);
/* Test dialogs */
hdb = create_package_db();
ok(hdb, "failed to create database\n");
r = MsiDatabaseImportA(hdb, CURR_DIR, "forcecodepage.idt");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d", r);
r = create_dialog_table(hdb);
ok(r == ERROR_SUCCESS, "failed to create dialog table %u\n", r);
r = run_query(hdb, "INSERT INTO `Dialog` (`Dialog`, `HCentering`, "
"`VCentering`, `Width`, `Height`, `Control_First`) "
"VALUES ('dialog', 5, 5, 100, 100, 'dummy')");
ok(r == ERROR_SUCCESS, "failed to insert into dialog table %u\n", r);
r = create_control_table(hdb);
ok(r == ERROR_SUCCESS, "failed to create control table %u\n", r);
r = run_query(hdb, "INSERT INTO `Control` (`Dialog_`, `Control`, "
"`Type`, `X`, `Y`, `Width`, `Height`) "
"VALUES('dialog', 'dummy', 'Text', 5, 5, 5, 5)");
ok(r == ERROR_SUCCESS, "failed to insert into control table %u", r);
r = package_from_db(hdb, &hpkg);
ok(r == ERROR_SUCCESS, "failed to create package %u\n", r);
ok_sequence(openpackage_sequence, "MsiOpenPackage with valid db", TRUE);
/* Test a custom action */
r = MsiDoActionA(hpkg, "custom");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok_sequence(doaction_custom_fullui_sequence, "MsiDoAction(\"custom\")", TRUE);
retval = 0;
r = MsiDoActionA(hpkg, "custom");
ok(r == ERROR_FUNCTION_NOT_CALLED, "Expected ERROR_FUNCTION_NOT_CALLED, got %d\n", r);
ok_sequence(doaction_dialog_nonexistent_sequence, "MsiDoAction(\"custom\")", TRUE);
r = MsiDoActionA(hpkg, "dialog");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok_sequence(doaction_dialog_sequence, "MsiDoAction(\"dialog\")", TRUE);
retval = -1;
r = MsiDoActionA(hpkg, "error");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok_sequence(doaction_dialog_error_sequence, "MsiDoAction(\"error\")", FALSE);
MsiCloseHandle(hpkg);
ok_sequence(closehandle_sequence, "MsiCloseHandle()", FALSE);
CoUninitialize();
DeleteFileA(msifile);
DeleteFileA("forcecodepage.idt");
......
......@@ -7024,406 +7024,413 @@ msgstr ""
msgid "=== Logging started: %s %s ==="
msgstr ""
#: msi.rc:87
#: msi.rc:82
msgid ""
"The installer has encountered an unexpected error installing this package. "
"This may indicate a problem with this package. The error code is [1]. {{The "
"arguments are: [2], [3], [4]}}"
msgstr ""
#: msi.rc:88
#, fuzzy
msgid "Allocating registry space"
msgstr "Приложения"
#: msi.rc:88
#: msi.rc:89
msgid "Searching for installed applications"
msgstr ""
#: msi.rc:89
#: msi.rc:90
msgid "Binding executables"
msgstr ""
#: msi.rc:90 msi.rc:133
#: msi.rc:91 msi.rc:134
#, fuzzy
msgid "Searching for qualifying products"
msgstr "Свойства"
#: msi.rc:91 msi.rc:92 msi.rc:97
#: msi.rc:92 msi.rc:93 msi.rc:98
msgid "Computing space requirements"
msgstr ""
#: msi.rc:93
#: msi.rc:94
#, fuzzy
#| msgid "Create New Folder"
msgid "Creating folders"
msgstr "Създай нова папка"
#: msi.rc:94
#: msi.rc:95
#, fuzzy
#| msgid "Create Shor&tcut"
msgid "Creating shortcuts"
msgstr "Създай препра&тка"
#: msi.rc:95
#: msi.rc:96
msgid "Deleting services"
msgstr ""
#: msi.rc:96
#: msi.rc:97
msgid "Creating duplicate files"
msgstr ""
#: msi.rc:98
#: msi.rc:99
#, fuzzy
msgid "Searching for related applications"
msgstr "Свойства"
#: msi.rc:99
#: msi.rc:100
msgid "Copying network install files"
msgstr ""
#: msi.rc:100
#: msi.rc:101
#, fuzzy
#| msgid "Copying Files..."
msgid "Copying new files"
msgstr "Копиране на файлове..."
#: msi.rc:101
#: msi.rc:102
msgid "Installing ODBC components"
msgstr ""
#: msi.rc:102
#: msi.rc:103
#, fuzzy
msgid "Installing new services"
msgstr "Оставащ размер.\n"
#: msi.rc:103
#: msi.rc:104
#, fuzzy
msgid "Installing system catalog"
msgstr "Инсталиране..."
#: msi.rc:104
#: msi.rc:105
msgid "Validating install"
msgstr ""
#: msi.rc:105
#: msi.rc:106
msgid "Evaluating launch conditions"
msgstr ""
#: msi.rc:106
#: msi.rc:107
msgid "Migrating feature states from related applications"
msgstr ""
#: msi.rc:107
#: msi.rc:108
#, fuzzy
msgid "Moving files"
msgstr "Отвори файл"
#: msi.rc:108
#: msi.rc:109
#, fuzzy
msgid "Publishing assembly information"
msgstr "Информация"
#: msi.rc:109
#: msi.rc:110
msgid "Unpublishing assembly information"
msgstr ""
#: msi.rc:110
#: msi.rc:111
#, fuzzy
msgid "Patching files"
msgstr "Отвори файл"
#: msi.rc:111
#: msi.rc:112
msgid "Updating component registration"
msgstr ""
#: msi.rc:112
#: msi.rc:113
msgid "Publishing Qualified Components"
msgstr ""
#: msi.rc:113
#: msi.rc:114
msgid "Publishing Product Features"
msgstr ""
#: msi.rc:114
#: msi.rc:115
#, fuzzy
msgid "Publishing product information"
msgstr "Информация"
#: msi.rc:115
#: msi.rc:116
msgid "Registering Class servers"
msgstr ""
#: msi.rc:116
#: msi.rc:117
msgid "Registering COM+ Applications and Components"
msgstr ""
#: msi.rc:117
#: msi.rc:118
msgid "Registering extension servers"
msgstr ""
#: msi.rc:118
#: msi.rc:119
msgid "Registering fonts"
msgstr ""
#: msi.rc:119
#: msi.rc:120
#, fuzzy
#| msgid "Registry Editor"
msgid "Registering MIME info"
msgstr "Редактор на системния регистър"
#: msi.rc:120
#: msi.rc:121
#, fuzzy
msgid "Registering product"
msgstr "Редактор на системния регистър.\n"
#: msi.rc:121
#: msi.rc:122
msgid "Registering program identifiers"
msgstr ""
#: msi.rc:122
#: msi.rc:123
msgid "Registering type libraries"
msgstr ""
#: msi.rc:123
#: msi.rc:124
msgid "Registering user"
msgstr ""
#: msi.rc:124
#: msi.rc:125
#, fuzzy
msgid "Removing duplicated files"
msgstr "&Анотирай..."
#: msi.rc:125 msi.rc:149
#: msi.rc:126 msi.rc:150
msgid "Updating environment strings"
msgstr ""
#: msi.rc:126
#: msi.rc:127
#, fuzzy
#| msgid "&Remove application"
msgid "Removing applications"
msgstr "Пре&махване на приложение"
#: msi.rc:127
#: msi.rc:128
#, fuzzy
msgid "Removing files"
msgstr "Отвори файл"
#: msi.rc:128
#: msi.rc:129
msgid "Removing folders"
msgstr ""
#: msi.rc:129
#: msi.rc:130
msgid "Removing INI files entries"
msgstr ""
#: msi.rc:130
#: msi.rc:131
msgid "Removing ODBC components"
msgstr ""
#: msi.rc:131
#: msi.rc:132
#, fuzzy
#| msgid "Are you sure you want to delete '%1'?"
msgid "Removing system registry values"
msgstr "Наистина ли искате да изтриете '%1'?"
#: msi.rc:132
#: msi.rc:133
msgid "Removing shortcuts"
msgstr ""
#: msi.rc:134
#: msi.rc:135
msgid "Registering modules"
msgstr ""
#: msi.rc:135
#: msi.rc:136
msgid "Unregistering modules"
msgstr ""
#: msi.rc:136
#: msi.rc:137
#, fuzzy
#| msgid "Initializing; "
msgid "Initializing ODBC directories"
msgstr "Подготовка; "
#: msi.rc:137
#: msi.rc:138
msgid "Starting services"
msgstr ""
#: msi.rc:138
#: msi.rc:139
msgid "Stopping services"
msgstr ""
#: msi.rc:139
#: msi.rc:140
msgid "Unpublishing Qualified Components"
msgstr ""
#: msi.rc:140
#: msi.rc:141
msgid "Unpublishing Product Features"
msgstr ""
#: msi.rc:141
#: msi.rc:142
msgid "Unpublishing product information"
msgstr ""
#: msi.rc:142
#: msi.rc:143
msgid "Unregister Class servers"
msgstr ""
#: msi.rc:143
#: msi.rc:144
msgid "Unregistering COM+ Applications and Components"
msgstr ""
#: msi.rc:144
#: msi.rc:145
msgid "Unregistering extension servers"
msgstr ""
#: msi.rc:145
#: msi.rc:146
msgid "Unregistering fonts"
msgstr ""
#: msi.rc:146
#: msi.rc:147
msgid "Unregistering MIME info"
msgstr ""
#: msi.rc:147
#: msi.rc:148
msgid "Unregistering program identifiers"
msgstr ""
#: msi.rc:148
#: msi.rc:149
msgid "Unregistering type libraries"
msgstr ""
#: msi.rc:150
#: msi.rc:151
msgid "Writing INI files values"
msgstr ""
#: msi.rc:151
#: msi.rc:152
#, fuzzy
#| msgid "Warning: system library"
msgid "Writing system registry values"
msgstr "Внимание: системна библиотека"
#: msi.rc:157
#: msi.rc:158
msgid "Free space: [1]"
msgstr ""
#: msi.rc:158
#: msi.rc:159
msgid "Property: [1], Signature: [2]"
msgstr ""
#: msi.rc:159
#: msi.rc:160
#, fuzzy
msgid "File: [1]"
msgstr "Файл"
#: msi.rc:160 msi.rc:187
#: msi.rc:161 msi.rc:188
#, fuzzy
msgid "Folder: [1]"
msgstr "Папка"
#: msi.rc:161 msi.rc:190
#: msi.rc:162 msi.rc:191
msgid "Shortcut: [1]"
msgstr ""
#: msi.rc:162 msi.rc:193 msi.rc:194
#: msi.rc:163 msi.rc:194 msi.rc:195
msgid "Service: [1]"
msgstr ""
#: msi.rc:163 msi.rc:166 msi.rc:170
#: msi.rc:164 msi.rc:167 msi.rc:171
msgid "File: [1], Directory: [9], Size: [6]"
msgstr ""
#: msi.rc:164
#: msi.rc:165
#, fuzzy
msgid "Found application: [1]"
msgstr "Wine Application Uninstaller"
#: msi.rc:165
#: msi.rc:166
msgid "File: [1], Directory: [9], Size: [6]"
msgstr ""
#: msi.rc:167
#: msi.rc:168
msgid "Service: [2]"
msgstr ""
#: msi.rc:168
#: msi.rc:169
msgid "File: [1], Dependencies: [2]"
msgstr ""
#: msi.rc:169
#: msi.rc:170
#, fuzzy
#| msgid "Applications"
msgid "Application: [1]"
msgstr "Приложения"
#: msi.rc:171 msi.rc:172
#: msi.rc:172 msi.rc:173
msgid "Application Context:[1], Assembly Name:[2]"
msgstr ""
#: msi.rc:173
#: msi.rc:174
msgid "File: [1], Directory: [2], Size: [3]"
msgstr ""
#: msi.rc:174 msi.rc:195
#: msi.rc:175 msi.rc:196
msgid "Component ID: [1], Qualifier: [2]"
msgstr ""
#: msi.rc:175 msi.rc:196
#: msi.rc:176 msi.rc:197
msgid "Feature: [1]"
msgstr ""
#: msi.rc:176 msi.rc:197
#: msi.rc:177 msi.rc:198
msgid "Class Id: [1]"
msgstr ""
#: msi.rc:177
#: msi.rc:178
msgid "AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}"
msgstr ""
#: msi.rc:178 msi.rc:199
#: msi.rc:179 msi.rc:200
msgid "Extension: [1]"
msgstr ""
#: msi.rc:179 msi.rc:200
#: msi.rc:180 msi.rc:201
#, fuzzy
#| msgid "&Font:"
msgid "Font: [1]"
msgstr "&Шрифт:"
#: msi.rc:180 msi.rc:201
#: msi.rc:181 msi.rc:202
msgid "MIME Content Type: [1], Extension: [2]"
msgstr ""
#: msi.rc:181 msi.rc:202
#: msi.rc:182 msi.rc:203
msgid "ProgId: [1]"
msgstr ""
#: msi.rc:182 msi.rc:203
#: msi.rc:183 msi.rc:204
msgid "LibID: [1]"
msgstr ""
#: msi.rc:183 msi.rc:186
#: msi.rc:184 msi.rc:187
msgid "File: [1], Directory: [9]"
msgstr ""
#: msi.rc:184 msi.rc:204
#: msi.rc:185 msi.rc:205
msgid "Name: [1], Value: [2], Action [3]"
msgstr ""
#: msi.rc:185
#: msi.rc:186
msgid "Application: [1], Command line: [2]"
msgstr ""
#: msi.rc:188 msi.rc:205
#: msi.rc:189 msi.rc:206
msgid "File: [1], Section: [2], Key: [3], Value: [4]"
msgstr ""
#: msi.rc:189
#: msi.rc:190
msgid "Key: [1], Name: [2]"
msgstr ""
#: msi.rc:191 msi.rc:192
#: msi.rc:192 msi.rc:193
msgid "File: [1], Folder: [2]"
msgstr ""
#: msi.rc:198
#: msi.rc:199
msgid "AppId: [1]{{, AppType: [2]}}"
msgstr ""
#: msi.rc:206
#: msi.rc:207
msgid "Key: [1], Name: [2], Value: [3]"
msgstr ""
......
......@@ -6907,391 +6907,398 @@ msgstr ""
msgid "=== Logging started: %s %s ==="
msgstr ""
#: msi.rc:87
#: msi.rc:82
msgid ""
"The installer has encountered an unexpected error installing this package. "
"This may indicate a problem with this package. The error code is [1]. {{The "
"arguments are: [2], [3], [4]}}"
msgstr ""
#: msi.rc:88
#, fuzzy
msgid "Allocating registry space"
msgstr "Επιλογές"
#: msi.rc:88
#: msi.rc:89
msgid "Searching for installed applications"
msgstr ""
#: msi.rc:89
#: msi.rc:90
msgid "Binding executables"
msgstr ""
#: msi.rc:90 msi.rc:133
#: msi.rc:91 msi.rc:134
#, fuzzy
msgid "Searching for qualifying products"
msgstr "Επιλογές"
#: msi.rc:91 msi.rc:92 msi.rc:97
#: msi.rc:92 msi.rc:93 msi.rc:98
msgid "Computing space requirements"
msgstr ""
#: msi.rc:93
#: msi.rc:94
#, fuzzy
#| msgid "Create New Folder"
msgid "Creating folders"
msgstr "Δημιουργία νέου καταλόγου"
#: msi.rc:94
#: msi.rc:95
msgid "Creating shortcuts"
msgstr ""
#: msi.rc:95
#: msi.rc:96
msgid "Deleting services"
msgstr ""
#: msi.rc:96
#: msi.rc:97
msgid "Creating duplicate files"
msgstr ""
#: msi.rc:98
#: msi.rc:99
#, fuzzy
msgid "Searching for related applications"
msgstr "Επιλογές"
#: msi.rc:99
#: msi.rc:100
msgid "Copying network install files"
msgstr ""
#: msi.rc:100
#: msi.rc:101
msgid "Copying new files"
msgstr ""
#: msi.rc:101
#: msi.rc:102
msgid "Installing ODBC components"
msgstr ""
#: msi.rc:102
#: msi.rc:103
#, fuzzy
msgid "Installing new services"
msgstr "Το αρχείο δε βρέθηκε.\n"
#: msi.rc:103
#: msi.rc:104
msgid "Installing system catalog"
msgstr ""
#: msi.rc:104
#: msi.rc:105
msgid "Validating install"
msgstr ""
#: msi.rc:105
#: msi.rc:106
msgid "Evaluating launch conditions"
msgstr ""
#: msi.rc:106
#: msi.rc:107
msgid "Migrating feature states from related applications"
msgstr ""
#: msi.rc:107
#: msi.rc:108
#, fuzzy
msgid "Moving files"
msgstr "Άνοιγμα Αρχείου"
#: msi.rc:108
#: msi.rc:109
#, fuzzy
msgid "Publishing assembly information"
msgstr "Εκτύπωση"
#: msi.rc:109
#: msi.rc:110
msgid "Unpublishing assembly information"
msgstr ""
#: msi.rc:110
#: msi.rc:111
#, fuzzy
msgid "Patching files"
msgstr "Άνοιγμα Αρχείου"
#: msi.rc:111
#: msi.rc:112
msgid "Updating component registration"
msgstr ""
#: msi.rc:112
#: msi.rc:113
msgid "Publishing Qualified Components"
msgstr ""
#: msi.rc:113
#: msi.rc:114
msgid "Publishing Product Features"
msgstr ""
#: msi.rc:114
#: msi.rc:115
#, fuzzy
msgid "Publishing product information"
msgstr "Εκτύπωση"
#: msi.rc:115
#: msi.rc:116
msgid "Registering Class servers"
msgstr ""
#: msi.rc:116
#: msi.rc:117
msgid "Registering COM+ Applications and Components"
msgstr ""
#: msi.rc:117
#: msi.rc:118
msgid "Registering extension servers"
msgstr ""
#: msi.rc:118
#: msi.rc:119
msgid "Registering fonts"
msgstr ""
#: msi.rc:119
#: msi.rc:120
msgid "Registering MIME info"
msgstr ""
#: msi.rc:120
#: msi.rc:121
msgid "Registering product"
msgstr ""
#: msi.rc:121
#: msi.rc:122
msgid "Registering program identifiers"
msgstr ""
#: msi.rc:122
#: msi.rc:123
msgid "Registering type libraries"
msgstr ""
#: msi.rc:123
#: msi.rc:124
msgid "Registering user"
msgstr ""
#: msi.rc:124
#: msi.rc:125
#, fuzzy
msgid "Removing duplicated files"
msgstr "Επιλογές"
#: msi.rc:125 msi.rc:149
#: msi.rc:126 msi.rc:150
msgid "Updating environment strings"
msgstr ""
#: msi.rc:126
#: msi.rc:127
#, fuzzy
msgid "Removing applications"
msgstr "Επιλογές"
#: msi.rc:127
#: msi.rc:128
#, fuzzy
msgid "Removing files"
msgstr "Άνοιγμα Αρχείου"
#: msi.rc:128
#: msi.rc:129
msgid "Removing folders"
msgstr ""
#: msi.rc:129
#: msi.rc:130
msgid "Removing INI files entries"
msgstr ""
#: msi.rc:130
#: msi.rc:131
msgid "Removing ODBC components"
msgstr ""
#: msi.rc:131
#: msi.rc:132
msgid "Removing system registry values"
msgstr ""
#: msi.rc:132
#: msi.rc:133
msgid "Removing shortcuts"
msgstr ""
#: msi.rc:134
#: msi.rc:135
msgid "Registering modules"
msgstr ""
#: msi.rc:135
#: msi.rc:136
msgid "Unregistering modules"
msgstr ""
#: msi.rc:136
#: msi.rc:137
#, fuzzy
#| msgid "Initializing; "
msgid "Initializing ODBC directories"
msgstr "Εκκίνηση, "
#: msi.rc:137
#: msi.rc:138
msgid "Starting services"
msgstr ""
#: msi.rc:138
#: msi.rc:139
msgid "Stopping services"
msgstr ""
#: msi.rc:139
#: msi.rc:140
msgid "Unpublishing Qualified Components"
msgstr ""
#: msi.rc:140
#: msi.rc:141
msgid "Unpublishing Product Features"
msgstr ""
#: msi.rc:141
#: msi.rc:142
msgid "Unpublishing product information"
msgstr ""
#: msi.rc:142
#: msi.rc:143
msgid "Unregister Class servers"
msgstr ""
#: msi.rc:143
#: msi.rc:144
msgid "Unregistering COM+ Applications and Components"
msgstr ""
#: msi.rc:144
#: msi.rc:145
msgid "Unregistering extension servers"
msgstr ""
#: msi.rc:145
#: msi.rc:146
msgid "Unregistering fonts"
msgstr ""
#: msi.rc:146
#: msi.rc:147
msgid "Unregistering MIME info"
msgstr ""
#: msi.rc:147
#: msi.rc:148
msgid "Unregistering program identifiers"
msgstr ""
#: msi.rc:148
#: msi.rc:149
msgid "Unregistering type libraries"
msgstr ""
#: msi.rc:150
#: msi.rc:151
msgid "Writing INI files values"
msgstr ""
#: msi.rc:151
#: msi.rc:152
msgid "Writing system registry values"
msgstr ""
#: msi.rc:157
#: msi.rc:158
msgid "Free space: [1]"
msgstr ""
#: msi.rc:158
#: msi.rc:159
msgid "Property: [1], Signature: [2]"
msgstr ""
#: msi.rc:159
#: msi.rc:160
msgid "File: [1]"
msgstr ""
#: msi.rc:160 msi.rc:187
#: msi.rc:161 msi.rc:188
#, fuzzy
msgid "Folder: [1]"
msgstr "Κατάλογοι Συστήματος"
#: msi.rc:161 msi.rc:190
#: msi.rc:162 msi.rc:191
msgid "Shortcut: [1]"
msgstr ""
#: msi.rc:162 msi.rc:193 msi.rc:194
#: msi.rc:163 msi.rc:194 msi.rc:195
msgid "Service: [1]"
msgstr ""
#: msi.rc:163 msi.rc:166 msi.rc:170
#: msi.rc:164 msi.rc:167 msi.rc:171
msgid "File: [1], Directory: [9], Size: [6]"
msgstr ""
#: msi.rc:164
#: msi.rc:165
#, fuzzy
msgid "Found application: [1]"
msgstr "Επιλογές"
#: msi.rc:165
#: msi.rc:166
msgid "File: [1], Directory: [9], Size: [6]"
msgstr ""
#: msi.rc:167
#: msi.rc:168
msgid "Service: [2]"
msgstr ""
#: msi.rc:168
#: msi.rc:169
msgid "File: [1], Dependencies: [2]"
msgstr ""
#: msi.rc:169
#: msi.rc:170
#, fuzzy
msgid "Application: [1]"
msgstr "Επιλογές"
#: msi.rc:171 msi.rc:172
#: msi.rc:172 msi.rc:173
msgid "Application Context:[1], Assembly Name:[2]"
msgstr ""
#: msi.rc:173
#: msi.rc:174
msgid "File: [1], Directory: [2], Size: [3]"
msgstr ""
#: msi.rc:174 msi.rc:195
#: msi.rc:175 msi.rc:196
msgid "Component ID: [1], Qualifier: [2]"
msgstr ""
#: msi.rc:175 msi.rc:196
#: msi.rc:176 msi.rc:197
msgid "Feature: [1]"
msgstr ""
#: msi.rc:176 msi.rc:197
#: msi.rc:177 msi.rc:198
msgid "Class Id: [1]"
msgstr ""
#: msi.rc:177
#: msi.rc:178
msgid "AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}"
msgstr ""
#: msi.rc:178 msi.rc:199
#: msi.rc:179 msi.rc:200
msgid "Extension: [1]"
msgstr ""
#: msi.rc:179 msi.rc:200
#: msi.rc:180 msi.rc:201
#, fuzzy
#| msgid "&Font:"
msgid "Font: [1]"
msgstr "&Γραμματοσειρά:"
#: msi.rc:180 msi.rc:201
#: msi.rc:181 msi.rc:202
msgid "MIME Content Type: [1], Extension: [2]"
msgstr ""
#: msi.rc:181 msi.rc:202
#: msi.rc:182 msi.rc:203
msgid "ProgId: [1]"
msgstr ""
#: msi.rc:182 msi.rc:203
#: msi.rc:183 msi.rc:204
msgid "LibID: [1]"
msgstr ""
#: msi.rc:183 msi.rc:186
#: msi.rc:184 msi.rc:187
msgid "File: [1], Directory: [9]"
msgstr ""
#: msi.rc:184 msi.rc:204
#: msi.rc:185 msi.rc:205
msgid "Name: [1], Value: [2], Action [3]"
msgstr ""
#: msi.rc:185
#: msi.rc:186
msgid "Application: [1], Command line: [2]"
msgstr ""
#: msi.rc:188 msi.rc:205
#: msi.rc:189 msi.rc:206
msgid "File: [1], Section: [2], Key: [3], Value: [4]"
msgstr ""
#: msi.rc:189
#: msi.rc:190
msgid "Key: [1], Name: [2]"
msgstr ""
#: msi.rc:191 msi.rc:192
#: msi.rc:192 msi.rc:193
msgid "File: [1], Folder: [2]"
msgstr ""
#: msi.rc:198
#: msi.rc:199
msgid "AppId: [1]{{, AppType: [2]}}"
msgstr ""
#: msi.rc:206
#: msi.rc:207
msgid "Key: [1], Name: [2], Value: [3]"
msgstr ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment