mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
* deleted installer files
* some mxml APIs are now exported git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3549 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
+319
-313
@@ -1,313 +1,319 @@
|
||||
/*
|
||||
* "$Id: mxml.h 385 2009-03-19 05:38:52Z mike $"
|
||||
*
|
||||
* Header file for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2009 by Michael Sweet.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2, or (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*/
|
||||
|
||||
// This release of Mini-XML has been modified for Process Hacker in the following ways:
|
||||
// * Memory allocations are done through Process Hacker's PhAllocate*/PhFree* functions.
|
||||
// * The file descriptor functions now use file handles.
|
||||
|
||||
/*
|
||||
* Prevent multiple inclusion...
|
||||
*/
|
||||
|
||||
#ifndef _mxml_h_
|
||||
# define _mxml_h_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <ctype.h>
|
||||
# include <errno.h>
|
||||
# include <windows.h>
|
||||
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define MXML_TAB 8 /* Tabs every N columns */
|
||||
|
||||
# define MXML_NO_CALLBACK 0 /* Don't use a type callback */
|
||||
# define MXML_INTEGER_CALLBACK mxml_integer_cb
|
||||
/* Treat all data as integers */
|
||||
# define MXML_OPAQUE_CALLBACK mxml_opaque_cb
|
||||
/* Treat all data as opaque */
|
||||
# define MXML_REAL_CALLBACK mxml_real_cb
|
||||
/* Treat all data as real numbers */
|
||||
# define MXML_TEXT_CALLBACK 0 /* Treat all data as text */
|
||||
# define MXML_IGNORE_CALLBACK mxml_ignore_cb
|
||||
/* Ignore all non-element content */
|
||||
|
||||
# define MXML_NO_PARENT 0 /* No parent for the node */
|
||||
|
||||
# define MXML_DESCEND 1 /* Descend when finding/walking */
|
||||
# define MXML_NO_DESCEND 0 /* Don't descend when finding/walking */
|
||||
# define MXML_DESCEND_FIRST -1 /* Descend for first find */
|
||||
|
||||
# define MXML_WS_BEFORE_OPEN 0 /* Callback for before open tag */
|
||||
# define MXML_WS_AFTER_OPEN 1 /* Callback for after open tag */
|
||||
# define MXML_WS_BEFORE_CLOSE 2 /* Callback for before close tag */
|
||||
# define MXML_WS_AFTER_CLOSE 3 /* Callback for after close tag */
|
||||
|
||||
# define MXML_ADD_BEFORE 0 /* Add node before specified node */
|
||||
# define MXML_ADD_AFTER 1 /* Add node after specified node */
|
||||
# define MXML_ADD_TO_PARENT NULL /* Add node relative to parent */
|
||||
|
||||
|
||||
/*
|
||||
* Data types...
|
||||
*/
|
||||
|
||||
typedef enum mxml_sax_event_e /**** SAX event type. ****/
|
||||
{
|
||||
MXML_SAX_CDATA, /* CDATA node */
|
||||
MXML_SAX_COMMENT, /* Comment node */
|
||||
MXML_SAX_DATA, /* Data node */
|
||||
MXML_SAX_DIRECTIVE, /* Processing directive node */
|
||||
MXML_SAX_ELEMENT_CLOSE, /* Element closed */
|
||||
MXML_SAX_ELEMENT_OPEN /* Element opened */
|
||||
} mxml_sax_event_t;
|
||||
|
||||
typedef enum mxml_type_e /**** The XML node type. ****/
|
||||
{
|
||||
MXML_IGNORE = -1, /* Ignore/throw away node @since Mini-XML 2.3@ */
|
||||
MXML_ELEMENT, /* XML element with attributes */
|
||||
MXML_INTEGER, /* Integer value */
|
||||
MXML_OPAQUE, /* Opaque string */
|
||||
MXML_REAL, /* Real value */
|
||||
MXML_TEXT, /* Text fragment */
|
||||
MXML_CUSTOM /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_type_t;
|
||||
|
||||
typedef void (*mxml_custom_destroy_cb_t)(void *);
|
||||
/**** Custom data destructor ****/
|
||||
|
||||
typedef void (*mxml_error_cb_t)(const char *);
|
||||
/**** Error callback function ****/
|
||||
|
||||
typedef struct mxml_attr_s /**** An XML element attribute value. ****/
|
||||
{
|
||||
char *name; /* Attribute name */
|
||||
char *value; /* Attribute value */
|
||||
} mxml_attr_t;
|
||||
|
||||
typedef struct mxml_element_s /**** An XML element value. ****/
|
||||
{
|
||||
char *name; /* Name of element */
|
||||
int num_attrs; /* Number of attributes */
|
||||
mxml_attr_t *attrs; /* Attributes */
|
||||
} mxml_element_t;
|
||||
|
||||
typedef struct mxml_text_s /**** An XML text value. ****/
|
||||
{
|
||||
int whitespace; /* Leading whitespace? */
|
||||
char *string; /* Fragment string */
|
||||
} mxml_text_t;
|
||||
|
||||
typedef struct mxml_custom_s /**** An XML custom value. @since Mini-XML 2.1@ ****/
|
||||
{
|
||||
void *data; /* Pointer to (allocated) custom data */
|
||||
mxml_custom_destroy_cb_t destroy; /* Pointer to destructor function */
|
||||
} mxml_custom_t;
|
||||
|
||||
typedef union mxml_value_u /**** An XML node value. ****/
|
||||
{
|
||||
mxml_element_t element; /* Element */
|
||||
int integer; /* Integer number */
|
||||
char *opaque; /* Opaque string */
|
||||
double real; /* Real number */
|
||||
mxml_text_t text; /* Text fragment */
|
||||
mxml_custom_t custom; /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_value_t;
|
||||
|
||||
typedef struct mxml_node_s /**** An XML node. ****/
|
||||
{
|
||||
mxml_type_t type; /* Node type */
|
||||
struct mxml_node_s *next; /* Next node under same parent */
|
||||
struct mxml_node_s *prev; /* Previous node under same parent */
|
||||
struct mxml_node_s *parent; /* Parent node */
|
||||
struct mxml_node_s *child; /* First child node */
|
||||
struct mxml_node_s *last_child; /* Last child node */
|
||||
mxml_value_t value; /* Node value */
|
||||
int ref_count; /* Use count */
|
||||
void *user_data; /* User data */
|
||||
} mxml_node_t;
|
||||
|
||||
typedef struct mxml_index_s /**** An XML node index. ****/
|
||||
{
|
||||
char *attr; /* Attribute used for indexing or NULL */
|
||||
int num_nodes; /* Number of nodes in index */
|
||||
int alloc_nodes; /* Allocated nodes in index */
|
||||
int cur_node; /* Current node */
|
||||
mxml_node_t **nodes; /* Node array */
|
||||
} mxml_index_t;
|
||||
|
||||
typedef int (*mxml_custom_load_cb_t)(mxml_node_t *, const char *);
|
||||
/**** Custom data load callback function ****/
|
||||
|
||||
typedef char *(*mxml_custom_save_cb_t)(mxml_node_t *);
|
||||
/**** Custom data save callback function ****/
|
||||
|
||||
typedef int (*mxml_entity_cb_t)(const char *);
|
||||
/**** Entity callback function */
|
||||
|
||||
typedef mxml_type_t (*mxml_load_cb_t)(mxml_node_t *);
|
||||
/**** Load callback function ****/
|
||||
|
||||
typedef const char *(*mxml_save_cb_t)(mxml_node_t *, int);
|
||||
/**** Save callback function ****/
|
||||
|
||||
typedef void (*mxml_sax_cb_t)(mxml_node_t *, mxml_sax_event_t, void *);
|
||||
/**** SAX callback function ****/
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
extern void mxmlAdd(mxml_node_t *parent, int where,
|
||||
mxml_node_t *child, mxml_node_t *node);
|
||||
extern void mxmlDelete(mxml_node_t *node);
|
||||
extern void mxmlElementDeleteAttr(mxml_node_t *node,
|
||||
const char *name);
|
||||
extern const char *mxmlElementGetAttr(mxml_node_t *node, const char *name);
|
||||
extern void mxmlElementSetAttr(mxml_node_t *node, const char *name,
|
||||
const char *value);
|
||||
extern void mxmlElementSetAttrf(mxml_node_t *node, const char *name,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern int mxmlEntityAddCallback(mxml_entity_cb_t cb);
|
||||
extern const char *mxmlEntityGetName(int val);
|
||||
extern int mxmlEntityGetValue(const char *name);
|
||||
extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb);
|
||||
extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
|
||||
const char *name, const char *attr,
|
||||
const char *value, int descend);
|
||||
extern void mxmlIndexDelete(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexEnum(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexFind(mxml_index_t *ind,
|
||||
const char *element,
|
||||
const char *value);
|
||||
extern mxml_index_t *mxmlIndexNew(mxml_node_t *node, const char *element,
|
||||
const char *attr);
|
||||
extern mxml_node_t *mxmlIndexReset(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlLoadFd(mxml_node_t *top, HANDLE fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, const char *string);
|
||||
extern mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);
|
||||
extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer);
|
||||
extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);
|
||||
extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);
|
||||
extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace,
|
||||
const char *string);
|
||||
extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern mxml_node_t *mxmlNewXML(const char *version);
|
||||
extern int mxmlRelease(mxml_node_t *node);
|
||||
extern void mxmlRemove(mxml_node_t *node);
|
||||
extern int mxmlRetain(mxml_node_t *node);
|
||||
extern char *mxmlSaveAllocString(mxml_node_t *node,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveFd(mxml_node_t *node, HANDLE fd,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveFile(mxml_node_t *node, FILE *fp,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveString(mxml_node_t *node, char *buffer,
|
||||
int bufsize, mxml_save_cb_t cb);
|
||||
extern mxml_node_t *mxmlSAXLoadFd(mxml_node_t *top, HANDLE fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern int mxmlSetCDATA(mxml_node_t *node, const char *data);
|
||||
extern int mxmlSetCustom(mxml_node_t *node, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
extern void mxmlSetCustomHandlers(mxml_custom_load_cb_t load,
|
||||
mxml_custom_save_cb_t save);
|
||||
extern int mxmlSetElement(mxml_node_t *node, const char *name);
|
||||
extern void mxmlSetErrorCallback(mxml_error_cb_t cb);
|
||||
extern int mxmlSetInteger(mxml_node_t *node, int integer);
|
||||
extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque);
|
||||
extern int mxmlSetReal(mxml_node_t *node, double real);
|
||||
extern int mxmlSetText(mxml_node_t *node, int whitespace,
|
||||
const char *string);
|
||||
extern int mxmlSetTextf(mxml_node_t *node, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern void mxmlSetWrapMargin(int column);
|
||||
extern mxml_node_t *mxmlWalkNext(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
extern mxml_node_t *mxmlWalkPrev(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
|
||||
|
||||
/*
|
||||
* Semi-private functions...
|
||||
*/
|
||||
|
||||
extern void mxml_error(const char *format, ...);
|
||||
extern mxml_type_t mxml_ignore_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_integer_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_opaque_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_real_cb(mxml_node_t *node);
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_mxml_h_ */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml.h 385 2009-03-19 05:38:52Z mike $".
|
||||
*/
|
||||
/*
|
||||
* "$Id: mxml.h 385 2009-03-19 05:38:52Z mike $"
|
||||
*
|
||||
* Header file for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2009 by Michael Sweet.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2, or (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*/
|
||||
|
||||
// This release of Mini-XML has been modified for Process Hacker in the following ways:
|
||||
// * Memory allocations are done through Process Hacker's PhAllocate*/PhFree* functions.
|
||||
// * The file descriptor functions now use file handles.
|
||||
|
||||
/*
|
||||
* Prevent multiple inclusion...
|
||||
*/
|
||||
|
||||
#ifndef _mxml_h_
|
||||
# define _mxml_h_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <ctype.h>
|
||||
# include <errno.h>
|
||||
# include <windows.h>
|
||||
|
||||
#ifdef PHAPP_EXPORT
|
||||
#define PHMXMLAPI __declspec(dllexport)
|
||||
#else
|
||||
#define PHMXMLAPI
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define MXML_TAB 8 /* Tabs every N columns */
|
||||
|
||||
# define MXML_NO_CALLBACK 0 /* Don't use a type callback */
|
||||
# define MXML_INTEGER_CALLBACK mxml_integer_cb
|
||||
/* Treat all data as integers */
|
||||
# define MXML_OPAQUE_CALLBACK mxml_opaque_cb
|
||||
/* Treat all data as opaque */
|
||||
# define MXML_REAL_CALLBACK mxml_real_cb
|
||||
/* Treat all data as real numbers */
|
||||
# define MXML_TEXT_CALLBACK 0 /* Treat all data as text */
|
||||
# define MXML_IGNORE_CALLBACK mxml_ignore_cb
|
||||
/* Ignore all non-element content */
|
||||
|
||||
# define MXML_NO_PARENT 0 /* No parent for the node */
|
||||
|
||||
# define MXML_DESCEND 1 /* Descend when finding/walking */
|
||||
# define MXML_NO_DESCEND 0 /* Don't descend when finding/walking */
|
||||
# define MXML_DESCEND_FIRST -1 /* Descend for first find */
|
||||
|
||||
# define MXML_WS_BEFORE_OPEN 0 /* Callback for before open tag */
|
||||
# define MXML_WS_AFTER_OPEN 1 /* Callback for after open tag */
|
||||
# define MXML_WS_BEFORE_CLOSE 2 /* Callback for before close tag */
|
||||
# define MXML_WS_AFTER_CLOSE 3 /* Callback for after close tag */
|
||||
|
||||
# define MXML_ADD_BEFORE 0 /* Add node before specified node */
|
||||
# define MXML_ADD_AFTER 1 /* Add node after specified node */
|
||||
# define MXML_ADD_TO_PARENT NULL /* Add node relative to parent */
|
||||
|
||||
|
||||
/*
|
||||
* Data types...
|
||||
*/
|
||||
|
||||
typedef enum mxml_sax_event_e /**** SAX event type. ****/
|
||||
{
|
||||
MXML_SAX_CDATA, /* CDATA node */
|
||||
MXML_SAX_COMMENT, /* Comment node */
|
||||
MXML_SAX_DATA, /* Data node */
|
||||
MXML_SAX_DIRECTIVE, /* Processing directive node */
|
||||
MXML_SAX_ELEMENT_CLOSE, /* Element closed */
|
||||
MXML_SAX_ELEMENT_OPEN /* Element opened */
|
||||
} mxml_sax_event_t;
|
||||
|
||||
typedef enum mxml_type_e /**** The XML node type. ****/
|
||||
{
|
||||
MXML_IGNORE = -1, /* Ignore/throw away node @since Mini-XML 2.3@ */
|
||||
MXML_ELEMENT, /* XML element with attributes */
|
||||
MXML_INTEGER, /* Integer value */
|
||||
MXML_OPAQUE, /* Opaque string */
|
||||
MXML_REAL, /* Real value */
|
||||
MXML_TEXT, /* Text fragment */
|
||||
MXML_CUSTOM /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_type_t;
|
||||
|
||||
typedef void (*mxml_custom_destroy_cb_t)(void *);
|
||||
/**** Custom data destructor ****/
|
||||
|
||||
typedef void (*mxml_error_cb_t)(const char *);
|
||||
/**** Error callback function ****/
|
||||
|
||||
typedef struct mxml_attr_s /**** An XML element attribute value. ****/
|
||||
{
|
||||
char *name; /* Attribute name */
|
||||
char *value; /* Attribute value */
|
||||
} mxml_attr_t;
|
||||
|
||||
typedef struct mxml_element_s /**** An XML element value. ****/
|
||||
{
|
||||
char *name; /* Name of element */
|
||||
int num_attrs; /* Number of attributes */
|
||||
mxml_attr_t *attrs; /* Attributes */
|
||||
} mxml_element_t;
|
||||
|
||||
typedef struct mxml_text_s /**** An XML text value. ****/
|
||||
{
|
||||
int whitespace; /* Leading whitespace? */
|
||||
char *string; /* Fragment string */
|
||||
} mxml_text_t;
|
||||
|
||||
typedef struct mxml_custom_s /**** An XML custom value. @since Mini-XML 2.1@ ****/
|
||||
{
|
||||
void *data; /* Pointer to (allocated) custom data */
|
||||
mxml_custom_destroy_cb_t destroy; /* Pointer to destructor function */
|
||||
} mxml_custom_t;
|
||||
|
||||
typedef union mxml_value_u /**** An XML node value. ****/
|
||||
{
|
||||
mxml_element_t element; /* Element */
|
||||
int integer; /* Integer number */
|
||||
char *opaque; /* Opaque string */
|
||||
double real; /* Real number */
|
||||
mxml_text_t text; /* Text fragment */
|
||||
mxml_custom_t custom; /* Custom data @since Mini-XML 2.1@ */
|
||||
} mxml_value_t;
|
||||
|
||||
typedef struct mxml_node_s /**** An XML node. ****/
|
||||
{
|
||||
mxml_type_t type; /* Node type */
|
||||
struct mxml_node_s *next; /* Next node under same parent */
|
||||
struct mxml_node_s *prev; /* Previous node under same parent */
|
||||
struct mxml_node_s *parent; /* Parent node */
|
||||
struct mxml_node_s *child; /* First child node */
|
||||
struct mxml_node_s *last_child; /* Last child node */
|
||||
mxml_value_t value; /* Node value */
|
||||
int ref_count; /* Use count */
|
||||
void *user_data; /* User data */
|
||||
} mxml_node_t;
|
||||
|
||||
typedef struct mxml_index_s /**** An XML node index. ****/
|
||||
{
|
||||
char *attr; /* Attribute used for indexing or NULL */
|
||||
int num_nodes; /* Number of nodes in index */
|
||||
int alloc_nodes; /* Allocated nodes in index */
|
||||
int cur_node; /* Current node */
|
||||
mxml_node_t **nodes; /* Node array */
|
||||
} mxml_index_t;
|
||||
|
||||
typedef int (*mxml_custom_load_cb_t)(mxml_node_t *, const char *);
|
||||
/**** Custom data load callback function ****/
|
||||
|
||||
typedef char *(*mxml_custom_save_cb_t)(mxml_node_t *);
|
||||
/**** Custom data save callback function ****/
|
||||
|
||||
typedef int (*mxml_entity_cb_t)(const char *);
|
||||
/**** Entity callback function */
|
||||
|
||||
typedef mxml_type_t (*mxml_load_cb_t)(mxml_node_t *);
|
||||
/**** Load callback function ****/
|
||||
|
||||
typedef const char *(*mxml_save_cb_t)(mxml_node_t *, int);
|
||||
/**** Save callback function ****/
|
||||
|
||||
typedef void (*mxml_sax_cb_t)(mxml_node_t *, mxml_sax_event_t, void *);
|
||||
/**** SAX callback function ****/
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
PHMXMLAPI extern void mxmlAdd(mxml_node_t *parent, int where,
|
||||
mxml_node_t *child, mxml_node_t *node);
|
||||
PHMXMLAPI extern void mxmlDelete(mxml_node_t *node);
|
||||
PHMXMLAPI extern void mxmlElementDeleteAttr(mxml_node_t *node,
|
||||
const char *name);
|
||||
PHMXMLAPI extern const char *mxmlElementGetAttr(mxml_node_t *node, const char *name);
|
||||
PHMXMLAPI extern void mxmlElementSetAttr(mxml_node_t *node, const char *name,
|
||||
const char *value);
|
||||
extern void mxmlElementSetAttrf(mxml_node_t *node, const char *name,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern int mxmlEntityAddCallback(mxml_entity_cb_t cb);
|
||||
extern const char *mxmlEntityGetName(int val);
|
||||
extern int mxmlEntityGetValue(const char *name);
|
||||
extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
|
||||
const char *name, const char *attr,
|
||||
const char *value, int descend);
|
||||
extern void mxmlIndexDelete(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexEnum(mxml_index_t *ind);
|
||||
extern mxml_node_t *mxmlIndexFind(mxml_index_t *ind,
|
||||
const char *element,
|
||||
const char *value);
|
||||
extern mxml_index_t *mxmlIndexNew(mxml_node_t *node, const char *element,
|
||||
const char *attr);
|
||||
extern mxml_node_t *mxmlIndexReset(mxml_index_t *ind);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlLoadFd(mxml_node_t *top, HANDLE fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
extern mxml_node_t *mxmlLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
PHMXMLAPI extern mxml_node_t *mxmlLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *));
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, const char *string);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);
|
||||
extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);
|
||||
extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace,
|
||||
const char *string);
|
||||
extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
PHMXMLAPI extern mxml_node_t *mxmlNewXML(const char *version);
|
||||
PHMXMLAPI extern int mxmlRelease(mxml_node_t *node);
|
||||
PHMXMLAPI extern void mxmlRemove(mxml_node_t *node);
|
||||
PHMXMLAPI extern int mxmlRetain(mxml_node_t *node);
|
||||
PHMXMLAPI extern char *mxmlSaveAllocString(mxml_node_t *node,
|
||||
mxml_save_cb_t cb);
|
||||
PHMXMLAPI extern int mxmlSaveFd(mxml_node_t *node, HANDLE fd,
|
||||
mxml_save_cb_t cb);
|
||||
extern int mxmlSaveFile(mxml_node_t *node, FILE *fp,
|
||||
mxml_save_cb_t cb);
|
||||
PHMXMLAPI extern int mxmlSaveString(mxml_node_t *node, char *buffer,
|
||||
int bufsize, mxml_save_cb_t cb);
|
||||
extern mxml_node_t *mxmlSAXLoadFd(mxml_node_t *top, HANDLE fd,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadFile(mxml_node_t *top, FILE *fp,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
extern mxml_node_t *mxmlSAXLoadString(mxml_node_t *top, const char *s,
|
||||
mxml_type_t (*cb)(mxml_node_t *),
|
||||
mxml_sax_cb_t sax, void *sax_data);
|
||||
PHMXMLAPI extern int mxmlSetCDATA(mxml_node_t *node, const char *data);
|
||||
PHMXMLAPI extern int mxmlSetCustom(mxml_node_t *node, void *data,
|
||||
mxml_custom_destroy_cb_t destroy);
|
||||
PHMXMLAPI extern void mxmlSetCustomHandlers(mxml_custom_load_cb_t load,
|
||||
mxml_custom_save_cb_t save);
|
||||
PHMXMLAPI extern int mxmlSetElement(mxml_node_t *node, const char *name);
|
||||
PHMXMLAPI extern void mxmlSetErrorCallback(mxml_error_cb_t cb);
|
||||
extern int mxmlSetInteger(mxml_node_t *node, int integer);
|
||||
PHMXMLAPI extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque);
|
||||
extern int mxmlSetReal(mxml_node_t *node, double real);
|
||||
PHMXMLAPI extern int mxmlSetText(mxml_node_t *node, int whitespace,
|
||||
const char *string);
|
||||
extern int mxmlSetTextf(mxml_node_t *node, int whitespace,
|
||||
const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern void mxmlSetWrapMargin(int column);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlWalkNext(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
PHMXMLAPI extern mxml_node_t *mxmlWalkPrev(mxml_node_t *node, mxml_node_t *top,
|
||||
int descend);
|
||||
|
||||
|
||||
/*
|
||||
* Semi-private functions...
|
||||
*/
|
||||
|
||||
extern void mxml_error(const char *format, ...);
|
||||
extern mxml_type_t mxml_ignore_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_integer_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_opaque_cb(mxml_node_t *node);
|
||||
extern mxml_type_t mxml_real_cb(mxml_node_t *node);
|
||||
|
||||
|
||||
/*
|
||||
* C++ support...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_mxml_h_ */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mxml.h 385 2009-03-19 05:38:52Z mike $".
|
||||
*/
|
||||
|
||||
Binary file not shown.
@@ -1,29 +0,0 @@
|
||||
7-Zip Command line version
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
License for use and distribution
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
7-Zip Copyright (C) 1999-2010 Igor Pavlov.
|
||||
|
||||
7za.exe is distributed under the GNU LGPL license
|
||||
|
||||
Notes:
|
||||
You can use 7-Zip on any computer, including a computer in a commercial
|
||||
organization. You don't need to register or pay for 7-Zip.
|
||||
|
||||
|
||||
GNU LGPL information
|
||||
--------------------
|
||||
|
||||
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 can receive a copy of the GNU Lesser General Public License from
|
||||
http://www.gnu.org/
|
||||
@@ -1,96 +0,0 @@
|
||||
;* Process Hacker 2 - Installer custom messages
|
||||
;*
|
||||
;* Copyright (C) 2010 XhmikosR
|
||||
;*
|
||||
;* This file is part of Process Hacker.
|
||||
;*
|
||||
;* Process Hacker is free software; you can redistribute it and/or modify
|
||||
;* it under the terms of the GNU General Public License as published by
|
||||
;* the Free Software Foundation, either version 3 of the License, or
|
||||
;* (at your option) any later version.
|
||||
;*
|
||||
;* Process Hacker 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 General Public License for more details.
|
||||
;*
|
||||
;* You should have received a copy of the GNU General Public License
|
||||
;* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
[CustomMessages]
|
||||
;sm=Start Menu, tsk=Task, com=Comment, msg=Message
|
||||
;English
|
||||
en.msg_SetupIsRunningWarning=Process Hacker Setup is already running!
|
||||
en.msg_DeleteLogSettings=Do you also want to delete Process Hacker logs and settings? %nIf you plan on reinstalling Process Hacker you do not have to delete them.
|
||||
en.msg_servicemanager=The service manager is not available
|
||||
en.msg_servicemanager2=Only NT based systems support services
|
||||
en.tsk_AllUsers=For all users
|
||||
en.tsk_CreateKPHService=Install KProcessHacker as a service
|
||||
en.tsk_CurrentUser=For the current user only
|
||||
en.tsk_DeleteKPHService=Delete KProcessHacker service
|
||||
en.tsk_Other=Other tasks:
|
||||
en.tsk_RemoveStartup=Remove Process Hacker from Windows startup
|
||||
en.tsk_ResetSettings=Reset Process Hacker settings
|
||||
en.tsk_RestoreTaskmgr=Restore Windows task manager
|
||||
en.tsk_SetDefaultTaskmgr=Set Process Hacker as the default task manager for Windows
|
||||
en.tsk_StartupDescr=Start Process Hacker on system startup
|
||||
en.tsk_StartupDescrMin=Minimized on system tray
|
||||
en.tsk_Startup=Startup options:
|
||||
en.run_VisitWebsite=Visit Process Hacker Website
|
||||
en.sm_Changelog=Changelog
|
||||
en.sm_com_Changelog=Process Hacker Changelog
|
||||
en.sm_Help=Help and Support
|
||||
en.sm_HelpFile=Process Hacker Help
|
||||
en.sm_ReadmeFile=ReadMe
|
||||
en.sm_com_ReadmeFile=Process Hacker ReadMe
|
||||
|
||||
;German
|
||||
de.msg_SetupIsRunningWarning=Der Process Hacker Setup läuft bereits!
|
||||
de.msg_DeleteLogSettings=Wollen Sie zusätzlich die Process Hacker Logs und Einstellungen löschen? %nWenn Sie Process Hacker erneut installieren brauchen Sie nichts zu löschen.
|
||||
de.msg_servicemanager=Der Service Manager ist nicht verfügbar
|
||||
de.msg_servicemanager2=Nur NT basierte Systeme unterstützen Services
|
||||
de.tsk_AllUsers=Für alle Benutzer
|
||||
de.tsk_CreateKPHService=KProcessHacker als Service installieren
|
||||
de.tsk_CurrentUser=Nur für den aktuellen Benutzer
|
||||
de.tsk_DeleteKPHService=KProcessHacker Service löschen
|
||||
de.tsk_Other=Andere Aufgaben:
|
||||
de.tsk_RemoveStartup=Process Hacker aus dem Windows Startup entfernen
|
||||
de.tsk_ResetSettings=Process Hacker Einstellungen zurücksetzen
|
||||
de.tsk_RestoreTaskmgr=Windows Task Manager wieder benutzen
|
||||
de.tsk_SetDefaultTaskmgr=Process Hacker als Standard Task Manager für Windows benutzen
|
||||
de.tsk_StartupDescr=Process Hacker starten beim Windows Start
|
||||
de.tsk_StartupDescrMin=Verkleinert in der Taskleiste
|
||||
de.tsk_Startup=Start Optionen:
|
||||
de.run_VisitWebsite=Process Hacker Website besuchen
|
||||
de.sm_Changelog=Änderungsliste
|
||||
de.sm_com_Changelog=Process Hacker Änderungsliste
|
||||
de.sm_Help=Hilfe und Support
|
||||
de.sm_HelpFile=Process Hacker Hilfe
|
||||
de.sm_ReadmeFile=LiesMich
|
||||
de.sm_com_ReadmeFile=Process Hacker LiesMich
|
||||
|
||||
;Greek
|
||||
gr.msg_SetupIsRunningWarning=Ç åãêáôÜóôáóç ôïõ Process Hacker ôñÝ÷åé Þäç!
|
||||
gr.msg_DeleteLogSettings=ÈÝëåôå íá äéáãñÜøåôå ôéò åðéëïãÝò êáé ôá áñ÷åßá êáôáãñáöÞò ôïõ Process Hacker; %nÁí óêïðåýåôå íá åãêáôáóôÞóåôå ðÜëé ôï Process Hacker äåí ÷ñåéÜæåôáé íá ôá äéáãñÜøåôå.
|
||||
gr.msg_servicemanager=The service manager is not available
|
||||
gr.msg_servicemanager2=Only NT based systems support services
|
||||
gr.tsk_AllUsers=Ãéá üëïõò ôïõò ÷ñÞóôåò
|
||||
gr.tsk_CreateKPHService=ÅãêáôÜóôáóç ôïõ KProcessHacker ùò õðçñåóßá
|
||||
gr.tsk_CurrentUser=Ãéá ôïí ôñÝ÷ùí ÷ñÞóôç ìüíï
|
||||
gr.tsk_DeleteKPHService=ÄéáãñáöÞ õðçñåóßáò ôïõ KProcessHacker
|
||||
gr.tsk_Other=¸îôñá:
|
||||
gr.tsk_RemoveStartup=Áöáßñåóç ôïõ Process Hacker áðü ôçí åêêßíçóç ôùí Windows
|
||||
gr.tsk_ResetSettings=ÅðáíáöïñÜ ôùí áñ÷éêþí ñõèìßóåùí ôïõ Process Hacker
|
||||
gr.tsk_RestoreTaskmgr=ÅðáíáöïñÜ ôïõ Windows Task Manager
|
||||
gr.tsk_SetDefaultTaskmgr=Ïñéóìüò ôïõ Process Hacker ùò ôïí ðñïêáèïñéóìÝíï task manager %nôùí Windows
|
||||
gr.tsk_StartupDescr=¸íáñîç ìå ôçí åêêßíçóç ôùí Windows
|
||||
gr.tsk_StartupDescrMin=Åëá÷éóôïðïéçìÝíï óôï tray ôïõ óõóôÞìáôïò
|
||||
gr.tsk_Startup=ÅðéëïãÝò åêêßíçóçò:
|
||||
gr.run_VisitWebsite=Åðéóêåöôåßôå ôçí éóôïóåëßäá ôïõ Process Hacker
|
||||
gr.sm_Changelog=Éóôïñéêü Åêäüóåùí
|
||||
gr.sm_com_Changelog=Éóôïñéêü Åêäüóåùí ôïõ Process Hacker
|
||||
gr.sm_Help=ÂïÞèåéá êáé ÕðïóôÞñéîç
|
||||
gr.sm_HelpFile=Áñ÷åßï âïÞèåéáò ôïõ Process Hacker
|
||||
gr.sm_ReadmeFile=Áñ÷åßï ReadMe
|
||||
gr.sm_com_ReadmeFile=Áñ÷åßï ReadMe ôïõ Process Hacker
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 201 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1,367 +0,0 @@
|
||||
; *** Inno Setup version 5.1.11+ Greek messages ***
|
||||
;
|
||||
; Note: When translating this text, do not add periods (.) to the end of
|
||||
; messages that didn't have them already, because on those messages Inno
|
||||
; Setup adds the periods automatically (appending a period would result in
|
||||
; two periods being displayed).
|
||||
;
|
||||
; Translated by Anastasis Chatzioglou
|
||||
; http://anasto.go.to
|
||||
; baldycom@hotmail.com
|
||||
;
|
||||
|
||||
[LangOptions]
|
||||
LanguageName=Greek
|
||||
LanguageID=$408
|
||||
LanguageCodePage=1253
|
||||
; If the language you are translating to requires special font faces or
|
||||
; sizes, uncomment any of the following entries and change them accordingly.
|
||||
;DialogFontName=MS Shell Dlg
|
||||
;DialogFontSize=8
|
||||
;DialogFontStandardHeight=13
|
||||
;TitleFontName=Arial
|
||||
;TitleFontSize=29
|
||||
;WelcomeFontName=Verdana
|
||||
;WelcomeFontSize=12
|
||||
;CopyrightFontName=Arial
|
||||
;CopyrightFontSize=8
|
||||
DialogFontName=MS Shell Dlg
|
||||
DialogFontSize=8
|
||||
;4.1.4+
|
||||
;DialogFontStandardHeight=13
|
||||
TitleFontName=Arial
|
||||
TitleFontSize=29
|
||||
WelcomeFontName=Arial
|
||||
WelcomeFontSize=12
|
||||
CopyrightFontName=Arial
|
||||
CopyrightFontSize=8
|
||||
|
||||
[Messages]
|
||||
; *** Application titles
|
||||
SetupAppTitle=Εγκατάσταση
|
||||
SetupWindowTitle=Εγκατάσταση - %1
|
||||
UninstallAppTitle=Απεγκατάσταση
|
||||
UninstallAppFullTitle=%1 Απεγκατάσταση
|
||||
; 2.0.x
|
||||
;DefaultUninstallIconName=Απεγκατάσταση %1
|
||||
|
||||
; *** Misc. common
|
||||
InformationTitle=Πληροφορίες
|
||||
ConfirmTitle=Επιβεβαίωση
|
||||
ErrorTitle=Σφάλμα
|
||||
|
||||
; *** SetupLdr messages
|
||||
SetupLdrStartupMessage=Θα εκτελεστεί η εγκατάσταση του %1. Θέλετε να συνεχίσετε;
|
||||
LdrCannotCreateTemp=Σφάλμα στη δημιουργία προσωρινού αρχείου. Η εγκατάσταση θα τερματιστεί τώρα.
|
||||
LdrCannotExecTemp=Σφάλμα στην εκτέλεση αρχείου στον προσωρινό κατάλογο. Η εγκατάσταση τερματίζεται.
|
||||
|
||||
; *** Startup error messages
|
||||
LastErrorMessage=%1.%n%nΣφάλμα %2: %3
|
||||
SetupFileMissing=Δεν βρίσκεται το αρχείο %1 στον κατάλογο εγκατάστασης. Ίσως χρειάζεται να προμηθευτείτε ένα νέο αντίγραφο του προγράμματος.
|
||||
SetupFileCorrupt=Το αρχείο εγκατάστασης είναι κατεστραμμένο. Ίσως χρειάζεται να προμηθευτείτε ένα νέο αντίγραφο του προγράμματος.
|
||||
SetupFileCorruptOrWrongVer=Το αρχείο εγκατάστασης είναι κατεστραμμένο η είναι σε λάθος έκδοση. Ίσως χρειάζεται να προμηθευτείτε ένα νέο αντίγραφο του προγράμματος.
|
||||
NotOnThisPlatform=Αυτό το πρόγραμμα δεν μπορεί να εκτελεστεί σε %1.
|
||||
OnlyOnThisPlatform=Αυτό το πρόγραμμα εκτελείται μόνο σε %1.
|
||||
; 5.1.0+
|
||||
OnlyOnTheseArchitectures=Αυτό το πρόγραμμα μπορεί να εγκατασταθεί μονό σε Windows σχεδιασμένα για επεξεργαστές με αρχιτεκτονική:%n%n%1
|
||||
MissingWOW64APIs=Η έκδοση των Windows που εκτελείται δεν διαθέτει λειτουργικότητα 64-bit. Για να διορθωθεί το πρόβλημα εγκατέστησε το Service Pack %1.
|
||||
WinVersionTooLowError=Αυτό το πρόγραμμα απαιτεί %1 έκδοση η νεότερη.
|
||||
WinVersionTooHighError=Αυτό το πρόγραμμα δεν μπορεί να εκτελεστεί σε %1 έκδοση η νεότερη.
|
||||
AdminPrivilegesRequired=Πρέπει να είστε ο Διαχειριστής συστήματος για να εγκαταστήσετε αυτό το πρόγραμμα.
|
||||
PowerUserPrivilegesRequired=Πρέπει να είστε ο Διαχειριστής συστήματος ή Power User για να εγκαταστήσετε αυτό το πρόγραμμα.
|
||||
SetupAppRunningError=Η εγκατάσταση εντόπισε ότι εκτελείται η εφαρμογή %1. Παρακαλώ κλείστε την εφαρμογή τώρα και πατήστε Εντάξει για να συνεχίσετε.
|
||||
UninstallAppRunningError=Η απεγκατάσταση εντόπισε ότι εκτελείται η εφαρμογή %1. Παρακαλώ κλείστε την εφαρμογή τώρα και πατήστε Εντάξει για να συνεχίσετε.
|
||||
|
||||
; *** Misc. errors
|
||||
ErrorCreatingDir=Η εγκατάσταση δεν μπορεί να δημιουργήσει τον κατάλογο %1.
|
||||
ErrorTooManyFilesInDir=Δεν μπορεί να δημιουργηθεί ένα αρχείο στον κατάλογο "%1" επειδή ήδη περιέχει πολλά αρχεία.
|
||||
|
||||
; *** Setup common messages
|
||||
ExitSetupTitle=Τέλος Εγκατάστασης.
|
||||
ExitSetupMessage=Η εγκατάσταση δεν έχει τελειώσει. Αν τη σταματήσετε τώρα το πρόγραμμα που προσπαθήσατε να εγκαταστήσετε δεν θα λειτουργεί.%n%nΜπορείτε να εκτελέσετε ξανά την εγκατάσταση αργότερα.
|
||||
AboutSetupMenuItem=&Σχετικά με την Εγκατάσταση...
|
||||
AboutSetupTitle=Σχετικά με την Εγκατάσταση.
|
||||
AboutSetupMessage=%1 έκδοση %2%n%3%n%n%1 προσωπική σελίδα%n%4
|
||||
AboutSetupNote=Anasto
|
||||
; 5.1.0+
|
||||
TranslatorNote=Anastasis Chatzioglou - baldycom@hotmail.com
|
||||
|
||||
; *** Buttons
|
||||
ButtonBack=< &Πίσω
|
||||
ButtonNext=&Επόμενο >
|
||||
ButtonInstall=&Εγκατάσταση
|
||||
ButtonOK=Ε&ντάξει
|
||||
ButtonCancel=&Ακυρο
|
||||
ButtonYes=Ν&αι
|
||||
ButtonYesToAll=Ναι σε &Ολα
|
||||
ButtonNo=Ο&χι
|
||||
ButtonNoToAll=Οχι &σε ολα
|
||||
ButtonFinish=&Τέλος
|
||||
ButtonBrowse=&Αναζήτηση...
|
||||
;4.1.3
|
||||
ButtonWizardBrowse=&Εύρεση...
|
||||
ButtonNewFolder=&Δημιουργία νέου φακέλου
|
||||
|
||||
; *** "Select Language" dialog messages
|
||||
; 4.0.x
|
||||
SelectLanguageTitle=Επιλογή της γλώσσας εγκατάστασης
|
||||
SelectLanguageLabel=Επιλογή της γλώσσας για χρήση κατά την διάρκεια της εγκατάστασης:
|
||||
|
||||
|
||||
; *** Common wizard text
|
||||
ClickNext=Πατήστε Επόμενο για να συνεχίσετε ή ’κυρο για να τερματίσετε την εγκατάσταση.
|
||||
; 2.0.x
|
||||
;ClickNextModern=Πατήστε Επόμενο για να συνεχίσετε ή ’κυρο για να τερματίσετε την εγκατάσταση.
|
||||
;;; - anasto -
|
||||
;4.1.3
|
||||
BrowseDialogTitle=Εύρεση φακέλου
|
||||
BrowseDialogLabel=Επιλέξτε φάκελο στην λίστα και μετά πατήστε OK.
|
||||
NewFolderName=Νέος φάκελος
|
||||
|
||||
; *** "Welcome" wizard page
|
||||
WelcomeLabel1=Καλωσορίσατε στην εγκατάσταση του [name].
|
||||
WelcomeLabel2=Θα γίνει εγκατάσταση του [name/ver] στον υπολογιστή σας.%n%nΠριν συνεχίσετε σας συνιστούμε να κλείσετε κάθε άλλη εφαρμογή που πιθανόν εκτελείτε.
|
||||
|
||||
; *** "Password" wizard page
|
||||
WizardPassword=Εισαγωγή Κωδικού
|
||||
PasswordLabel1=Αυτή η εγκατάσταση χρειάζεται κωδικό για να εκτελεστεί.
|
||||
PasswordLabel3=Παρακαλώ δώστε τον κωδικό σας και πατήστε Επόμενο για να συνεχίσετε.
|
||||
PasswordEditLabel=&Κωδικός:
|
||||
IncorrectPassword=Ο κωδικός που δώσατε είναι λάθος. Ξαναπροσπαθήστε.
|
||||
|
||||
; *** "License Agreement" wizard page
|
||||
WizardLicense=Αδεια Χρήσης
|
||||
LicenseLabel=Παρακαλώ διαβάστε προσεκτικά τις παρακάτω πληροφορίες πριν συνεχίσετε.
|
||||
; 2.0.x
|
||||
;LicenseLabel1=Παρακαλώ διαβάστε προσεκτικά τις παρακάτω πληροφορίες πριν συνεχίσετε. Χρησιμοποιήστε την μπάρα κύλισης για να δείτε όλο το κείμενο.
|
||||
;LicenseLabel2=Αποδέχεστε τους όρους της ’δειας Χρήσης; Αν επιλέξετε όχι η εγκατάσταση θα τερματιστεί. Για να συνεχιστεί η εγκατάσταση πρέπει να αποδέχεστε τους όρους της ’δειας Χρήσης.
|
||||
LicenseLabel3=Παρακαλώ διαβάστε προσεκτικά τις παρακάτω πληροφορίες πριν συνεχίσετε. Πρέπει να αποδέχεστε τους όρους της ’δειας Χρήσης πριν να συνεχίσετε την εγκατάσταση.
|
||||
LicenseAccepted=&Δέχομαι τους όρους της ’δειας Χρήσης
|
||||
LicenseNotAccepted=Δεν &αποδέχομαι τους όρους της ’δειας Χρήσης
|
||||
|
||||
; *** "Information" wizard pages
|
||||
WizardInfoBefore=Πληροφορίες
|
||||
InfoBeforeLabel=Παρακαλώ διαβάστε προσεκτικά τις παρακάτω πληροφορίες πριν συνεχίσετε.
|
||||
InfoBeforeClickLabel=Αν είστε έτοιμοι να συνεχίσετε πατήστε Επόμενο.
|
||||
WizardInfoAfter=Πληροφορίες
|
||||
InfoAfterLabel=Παρακαλώ διαβάστε προσεκτικά τις παρακάτω πληροφορίες πριν συνεχίσετε.
|
||||
InfoAfterClickLabel=Αν είστε έτοιμοι να συνεχίσετε πατήστε Επόμενο.
|
||||
|
||||
; *** "User Information" wizard page
|
||||
WizardUserInfo=Πληροφορίες για τον Χρήστη
|
||||
UserInfoDesc=Παρακαλώ δώστε τις πληροφορίες.
|
||||
UserInfoName=&Ονομα Χρήστη:
|
||||
UserInfoOrg=&Εταιρεία:
|
||||
UserInfoSerial=&Σειριακό Αριθμό:
|
||||
UserInfoNameRequired=Πρέπει να δώσετε όνομα.
|
||||
|
||||
; *** "Select Destination Location" wizard page
|
||||
; 4.0.x
|
||||
WizardSelectDir=Επιλέξτε τον κατάλογο που θα εγκατασταθεί το πρόγραμμα.
|
||||
SelectDirDesc=Πού θα εγκατασταθεί το [name];
|
||||
;SelectDirLabel=Επιλέξτε τον κατάλογο που θα εγκατασταθεί το πρόγραμμα. Πατήστε Επόμενο για να συνεχίσετε.
|
||||
DiskSpaceMBLabel=Αυτό το πρόγραμμα χρειάζεται [mb] MB χώρο στον δίσκο.
|
||||
ToUNCPathname=Η εγκατάσταση δεν μπορεί να γίνει σε δίσκο δικτύου. Αν θέλετε να γίνει η εγκατάσταση σε δίσκο δικτύου πρέπει να ορίσετε αυτόν το δίσκο.
|
||||
InvalidPath=Δώστε την πλήρη διαδρομή.%nπαράδειγμα:%n%nC:\APP
|
||||
InvalidDrive=Ο τοπικός δίσκος η ο δίσκος δικτύου που επιλέξατε δεν υπάρχει η δεν είναι προσβάσιμος. Επιλέξτε άλλον.
|
||||
DiskSpaceWarningTitle=Δεν υπάρχει αρκετός χώρος στο δίσκο.
|
||||
DiskSpaceWarning=Η εγκατάσταση χρειάζεται τουλάχιστον %1 KB ελεύθερο χώρο στο δίσκο αλλά ο επιλεγμένος οδηγός διαθέτει μόνον %2 KB.%n%nΘέλετε να συνεχίσετε οπωσδήποτε;
|
||||
BadDirName32=Ονόματα καταλόγων δεν μπορούν να περιέχουν κάποιον από τους παρακάτω χαρακτήρες:%n%n%1
|
||||
DirExistsTitle=Ο κατάλογος υπάρχει.
|
||||
DirExists=Ο κατάλογος:%n%n%1%n%nυπάρχει ήδη. Θέλετε να γίνει η εγκατάσταση σε αυτόν τον κατάλογο;
|
||||
DirDoesntExistTitle=Ο κατάλογος δεν υπάρχει.
|
||||
DirDoesntExist=Ο κατάλογος:%n%n%1%n%nδεν υπάρχει. Θέλετε να δημιουργηθεί;
|
||||
;4.1.3
|
||||
InvalidDirName=Λάθος όνομα φακέλου.
|
||||
;4.1.5
|
||||
DirNameTooLong=Το όνομα του φακέλου είναι πολύ μεγάλο.
|
||||
;4.1.8
|
||||
;SelectDirLabel2=Το [name] θα εγκατασταθεί στον ακόλουθο φάκελο.%n%nΓια συνέχεια πατήστε Επόμενο. Αν θέλετε άλλο φάκελο, πατήστε Εύρεση.
|
||||
SelectDirLabel3=Το [name] θα εγκατασταθεί στον ακόλουθο φάκελο.
|
||||
SelectDirBrowseLabel=Για συνέχεια πατήστε Επόμενο. Αν θέλετε άλλο φάκελο, πατήστε Εύρεση.
|
||||
|
||||
; *** "Select Components" wizard page
|
||||
WizardSelectComponents=Επιλογή Συστατικών
|
||||
SelectComponentsDesc=Ποια συστατικά θέλετε να εγκατασταθούν;
|
||||
SelectComponentsLabel2=Επιλέξτε τα συστατικά που θέλετε να εγκαταστήσετε και πατήστε Επόμενο για συνέχεια της εγκατάστασης.
|
||||
FullInstallation=Πλήρης Εγκατάσταση.
|
||||
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
|
||||
CompactInstallation=Περιορισμένη Εγκατάσταση.
|
||||
CustomInstallation=Προσαρμοσμένη Εγκατάσταση.
|
||||
NoUninstallWarningTitle=Τα συστατικά υπάρχουν.
|
||||
NoUninstallWarning=Η εγκατάσταση διαπίστωσε ότι τα παρακάτω συστατικά είναι ήδη εγκατεστημένα στον υπολογιστή σας:%n%n%1
|
||||
ComponentSize1=%1 KB
|
||||
ComponentSize2=%1 MB
|
||||
ComponentsDiskSpaceMBLabel=Η συγκεκριμένη επιλογή απαιτεί τουλάχιστον [mb] MB ελεύθερο χώρο στον δίσκο.
|
||||
|
||||
; *** "Select Additional Tasks" wizard page
|
||||
WizardSelectTasks=Επιλογή Περαιτέρω Ενεργειών
|
||||
SelectTasksDesc=Ποιές επιπλέον ενέργειες θέλετε να γίνουν;
|
||||
SelectTasksLabel2=Επιλέξτε τις επιπλέον ενέργειες που θέλετε να γίνουν κατά την εγκατάσταση του [name] και πατήστε Επόμενο.
|
||||
|
||||
; *** "Select Start Menu Folder" wizard page
|
||||
; 2.0.x
|
||||
;ReadyMemoTasks=Επιπλέον Ενέργειες:
|
||||
WizardSelectProgramGroup=Επιλογή Καταλόγου Στο Μενού Εκκίνηση.
|
||||
SelectStartMenuFolderDesc=Πού θα τοποθετηθούν οι συντομεύσεις του προγράμματος;
|
||||
; 4.0.x
|
||||
;SelectStartMenuFolderLabel=Επιλέξτε τον κατάλογο στο μενού εκκίνησης στον οποίο θέλετε δημιουργηθούν οι συντομεύσεις του προγράμματος και πατήστε Επόμενο.
|
||||
; 5.1.0+
|
||||
;NoIconsCheck=&Χωρίς δημιουργία εικονιδίων
|
||||
MustEnterGroupName=Πρέπει να δώσετε το όνομα ενός καταλόγου.
|
||||
BadGroupName=Ονόματα καταλόγων δεν μπορούν να περιέχουν κάποιον από τους παρακάτω χαρακτήρες:%n%n%1
|
||||
NoProgramGroupCheck2=&Χωρίς δημιουργία καταλόγου στο μενού εκκίνηση.
|
||||
;4.1.3
|
||||
InvalidGroupName=Το όνομα του group δεν είναι σωστό.
|
||||
;4.1.4+
|
||||
GroupNameTooLong=Το όνομα του group ειναι πολύ μεγάλο.
|
||||
;4.1.8
|
||||
;SelectStartMenuFolderLabel2=Η εγκατάσταση θα δημιουργήσει τις συντομεύσεις του προγράμματος στην ακόλουθη ομάδα.%n%nΓια συνέχεια, πατήστε Επόμενο. Αν θέλετε άλλη ομάδα, πατήστε εύρεση.
|
||||
SelectStartMenuFolderLabel3=Η εγκατάσταση θα δημιουργήσει τις συντομεύσεις του προγράμματος στην ακόλουθη ομάδα.
|
||||
SelectStartMenuFolderBrowseLabel=Για συνέχεια, πατήστε Επόμενο. Αν θέλετε άλλη ομάδα, πατήστε εύρεση.
|
||||
|
||||
|
||||
; *** "Ready to Install" wizard page
|
||||
WizardReady=Έτοιμος για εγκατάσταση
|
||||
ReadyLabel1=Η εγκατάσταση του [name] είναι έτοιμη να εκτελεστεί στον υπολογιστή σας.
|
||||
ReadyLabel2a=Πατήστε Εγκατάσταση για να συνεχίσετε ή Πίσω αν θέλετε να αλλάξετε κάποιες ρυθμίσεις.
|
||||
ReadyLabel2b=Πατήστε Εγκατάσταση για να συνεχίσετε.
|
||||
ReadyMemoUserInfo=Πληροφορίες Χρήστη:
|
||||
ReadyMemoDir=Κατάλογος προορισμού:
|
||||
ReadyMemoType=Είδος εγκατάστασης:
|
||||
ReadyMemoComponents=Επιλεγμένα συστατικά:
|
||||
ReadyMemoGroup=Κατάλογος στο μενού Προγράμματα:
|
||||
ReadyMemoTasks=Επιπλέον Ενέργειες:
|
||||
|
||||
; *** "Preparing to Install" wizard page
|
||||
WizardPreparing=Προετοιμασία Εγκατάστασης
|
||||
PreparingDesc=Η εγκατάσταση προετοιμάζει το πρόγραμμα [name] να τοποθετηθεί στον υπολογιστή.
|
||||
PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name].
|
||||
CannotContinue=Setup cannot continue. Please click Cancel to exit.
|
||||
|
||||
; *** "Installing" wizard page
|
||||
WizardInstalling=Πρόοδος Εγκατάστασης
|
||||
InstallingLabel=Παρακαλώ περιμένετε να ολοκληρωθεί η εγκατάσταση του [name] στον υπολογιστή σας.
|
||||
|
||||
; *** "Setup Completed" wizard page
|
||||
; 2.0.x
|
||||
;WizardFinished=Η Εγκατάσταση Ολοκληρώθηκε
|
||||
FinishedHeadingLabel=Completing the [name] Setup Wizard
|
||||
FinishedLabelNoIcons=Η εγκατάσταση του [name] στον υπολογιστή σας τελείωσε με επιτυχία.
|
||||
FinishedLabel=Η εγκατάσταση του [name] στον υπολογιστή σας τελείωσε με επιτυχία. Μπορείτε να ξεκινήσετε το πρόγραμμα επιλέγοντας το εικονίδιο που δημιουργήθηκε στο μενού εκκίνηση.
|
||||
ClickFinish=Πατήστε Τέλος για να τερματίσετε το πρόγραμμα εγκατάστασης.
|
||||
FinishedRestartLabel=Για να ολοκληρωθεί η εγκατάσταση του [name] πρέπει να γίνει επανεκκίνηση του υπολογιστή σας. Θέλετε να γίνει τώρα;
|
||||
FinishedRestartMessage=Για να ολοκληρωθεί η εγκατάσταση του [name] πρέπει να γίνει επανεκκίνηση του υπολογιστή σας.%n%nΘέλετε να γίνει τώρα;
|
||||
ShowReadmeCheck=Ναι θέλω να διαβάσω τις πληροφορίες του προγράμματος
|
||||
YesRadio=&Ναι να γίνει επανεκκίνηση τώρα.
|
||||
NoRadio=&Οχι θα κάνω επανεκκίνηση αργότερα.
|
||||
; used for example as 'Run MyProg.exe'
|
||||
RunEntryExec=Να εκτελεστεί το πρόγραμμα %1
|
||||
; used for example as 'View Readme.txt'
|
||||
RunEntryShellExec=Να εκτελεστεί το %1
|
||||
|
||||
; *** "Setup Needs the Next Disk" stuff
|
||||
ChangeDiskTitle=Τοποθετήστε την επόμενη δισκέττα
|
||||
; 4.0.x
|
||||
;SelectDirectory=Επιλέξτε κατάλογο
|
||||
SelectDiskLabel2=Τοποθετήστε την δισκέττα %1 και πατήστε Εντάξει.
|
||||
PathLabel=&Διαδρομή
|
||||
FileNotInDir2=Το αρχείο "%1" δεν βρίσκεται στο "%2". Τοποθετήστε τη σωστή δισκέττα.
|
||||
SelectDirectoryLabel=Δώστε την τοποθεσία της επόμενης δισκέττας.
|
||||
|
||||
; *** Installation phase messages
|
||||
SetupAborted=Η εγκατάσταση δεν ολοκληρώθηκε.%n%nΔιορθώστε το πρόβλημα και εκτελέστε ξανά την εγκατάσταση.
|
||||
EntryAbortRetryIgnore=Πατήστε Retry για να ξαναπροσπαθήσετε, Ignore για να συνεχίσετε η Abort για να τερματίσετε την εγκατάσταση.
|
||||
|
||||
; *** Installation status messages
|
||||
StatusCreateDirs=Δημιουργία καταλόγων...
|
||||
StatusExtractFiles=Αποσυμπίεση αρχείων...
|
||||
StatusCreateIcons=Δημιουργία εικονιδίων...
|
||||
StatusCreateIniEntries=Καταχώρηση στο ΙΝΙ αρχείο συστήματος...
|
||||
StatusCreateRegistryEntries=Καταχώρηση στο μητρώο συστήματος...
|
||||
StatusRegisterFiles=Καταχώρηση αρχείων
|
||||
StatusSavingUninstall=Πληροφορίες απεγκατάστασης...
|
||||
StatusRunProgram=Τελειώνοντας την εγκατάσταση...
|
||||
StatusRollback=Rolling back changes...
|
||||
|
||||
; *** Misc. errors
|
||||
; 2.0.x
|
||||
;ErrorInternal=Σφάλμα %1
|
||||
ErrorInternal2=Σφάλμα %1
|
||||
ErrorFunctionFailedNoCode=%1 Σφάλμα
|
||||
ErrorFunctionFailed=%1 Σφάλμα, κωδ. %2
|
||||
ErrorFunctionFailedWithMessage=%1 Σφάλμα, κωδ. %2%n%3
|
||||
ErrorExecutingProgram=Δεν μπορεί να εκτελεστεί το αρχείο:%n%1
|
||||
|
||||
;2.0.x
|
||||
;ErrorDDEExecute=DDE: Σφάλμα κατά την εκτέλεση της ενέργειας (code: %1)
|
||||
;ErrorDDECommandFailed=DDE: Η εντολή απέτυχε.
|
||||
;ErrorDDERequest=DDE: Σφάλμα κατά την εκτέλεση της ενέργειας (code: %1)
|
||||
|
||||
; *** Registry errors
|
||||
ErrorRegOpenKey=Δεν μπορεί να διαβαστεί το κλειδί μητρώου συστήματος:%n%1\%2
|
||||
ErrorRegCreateKey=Δεν μπορεί να δημιουργηθεί το κλειδί μητρώου συστήματος:%n%1\%2
|
||||
ErrorRegWriteKey=Δεν μπορεί να γίνει καταχώρηση στο κλειδί μητρώου συστήματος:%n%1\%2
|
||||
|
||||
; *** INI errors
|
||||
ErrorIniEntry=Δεν μπορεί να γίνει καταχώρηση στο ΙΝΙ αρχείο συστήματος "%1".
|
||||
|
||||
; *** File copying errors
|
||||
FileAbortRetryIgnore=Πατήστε Retry για να ξαναπροσπαθήσετε, Ignore για να συνεχίσετε η Abort για να τερματίσετε την εγκατάσταση.
|
||||
FileAbortRetryIgnore2=Πατήστε Retry για να ξαναπροσπαθήσετε, Ignore για να συνεχίσετε η Abort για να τερματίσετε την εγκατάσταση.
|
||||
SourceIsCorrupted=Το αρχείο προέλευσης είναι κατεστραμμένο.
|
||||
SourceDoesntExist=Το αρχείο προέλευσης "%1" δεν υπάρχει.
|
||||
ExistingFileReadOnly=Το αρχείο είναι μπαρκαρισμένο μόνο για ανάγνωση.%n%nΠατήστε Retry για να το ξεμαρκάρετε και να προσπαθήσετε πάλι, Ignore για να το προσπεράσετε η Abort για να τερματίσετε την εγκατάσταση.
|
||||
ErrorReadingExistingDest=Παρουσιάστηκε σφάλμα κατά την ανάγνωση του αρχείου:
|
||||
FileExists=Το αρχείο υπάρχει.%n%nΘέλετε να ξαναγραφτεί;
|
||||
ExistingFileNewer=Ενα αρχείο που βρέθηκε στον υπολογιστή σας είναι νεότερης έκδοσης απο εκείνο της εγκατάστασης. Προτείνεται να κρατήσετε το υπάρχον αρχείο.%n%nΘέλετε να κρατήσετε το υπάρχον αρχείο;
|
||||
ErrorChangingAttr=Προέκυψε σφάλμα στην προσπάθεια να αλλαχτούν τα χαρακτηριστικά του αρχείου:
|
||||
ErrorCreatingTemp=Προέκυψε σφάλμα στην προσπάθεια να δημιουργηθεί ένα αρχείο στον κατάλογο προορισμού:
|
||||
ErrorReadingSource=Προέκυψε σφάλμα στην προσπάθεια ανάγνωσης του αρχείου προέλευσης:
|
||||
ErrorCopying=Προέκυψε σφάλμα στην προσπάθεια να αντιγραφεί το αρχείο:
|
||||
ErrorReplacingExistingFile=Προέκυψε σφάλμα στην προσπάθεια να αντικατασταθεί το υπάρχον αρχείο:
|
||||
ErrorRestartReplace=Προέκυψε σφάλμα στην προσπάθεια να γίνει επανεκκίνηση και αντικατάσταση αρχείου:
|
||||
ErrorRenamingTemp=Προέκυψε σφάλμα στην προσπάθεια μετονομασίας ενός αρχείου στον κατάλογο προορισμού:
|
||||
ErrorRegisterServer=Προέκυψε σφάλμα στην προσπάθεια καταχώρησης DLL/OCX: %1
|
||||
ErrorRegSvr32Failed=RegSvr32 failed with exit code %1
|
||||
ErrorRegisterTypeLib=Unable to register the type library: %1
|
||||
|
||||
; *** Post-installation errors
|
||||
ErrorOpeningReadme=Προέκυψε σφάλμα στην προσπάθεια να φορτωθεί το αρχείο πληροφοριών.
|
||||
ErrorRestartingComputer=Προέκυψε σφάλμα στην προσπάθεια επανεκκίνησης του υπολογιστή.%nΠαρακαλώ επανεκκινήστε τον υπολογιστή σας.
|
||||
|
||||
; *** Uninstaller messages
|
||||
UninstallNotFound=Το αρχείο "%1" δεν βρέθηκε. Η απεγκατάσταση δεν μπορεί να γίνει
|
||||
; 4.0.x
|
||||
UninstallOpenError=Το αρχείο "%1" δεν μπόρεσε να φορτωθεί. Η απεγκατάσταση δεν μπορεί να γίνει
|
||||
UninstallUnsupportedVer=Το αρχείο "%1" δεν αναγνωρίζεται από αυτή την έκδοση της εγκατάστασης, Η απεγκατάσταση δεν μπορεί να εκτελεστεί
|
||||
UninstallUnknownEntry=Το αρχείο "%1" δεν αναγνωρίζεται από αυτή την έκδοση της εγκατάστασης, Η απεγκατάσταση δεν μπορεί να εκτελεστεί
|
||||
ConfirmUninstall=Είστε σίγουροι ότι θέλετε να διαγράψετε το %1 και όλα τα συστατικά του;
|
||||
; 5.1.0+
|
||||
UninstallOnlyOnWin64=Αυτή η εφαρμογή μπορεί να απεγκατασταθεί μόνο σε 64-bit Windows.
|
||||
OnlyAdminCanUninstall=Η απεγκατάσταση μπορεί να εκτελεστεί μόνο από τον Διαχειριστή συστήματος
|
||||
UninstallStatusLabel=Παρακαλώ περιμένετε όσο το %1 διαγράφετε από τον υπολογιστή σας
|
||||
UninstalledAll=Η απεγκατάσταση του %1 έγινε με επιτυχία.
|
||||
UninstalledMost=Η απεγκατάσταση του %1 έγινε με επιτυχία.%n%nΚάποια συστατικά που παρέμειναν στον υπολογιστή σας θα πρέπει να τα διαγράψετε εσείς.
|
||||
UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now?
|
||||
UninstallDataCorrupted="%1" Αυτό το αρχείο είναι κατεστραμμένο. Δεν μπορεί να γίνει απεγκατάσταση.
|
||||
|
||||
; *** Uninstallation phase messages
|
||||
ConfirmDeleteSharedFileTitle=Θέλετε να διαγραφούν τα κοινά αρχεία;
|
||||
ConfirmDeleteSharedFile2=Τα κοινά αρχεία δεν χρησιμοποιούνται από κάποιο πρόγραμμα. Θέλετε να διαγραφούν;%n%nΑν κάποιο πρόγραμμα τα χρησιμοποιεί ίσως δεν εκτελείται σωστά αν τα διαγράψετε. Αν δεν είστε σίγουροι αφήστε τα στο σύστημα σας δεν προκαλούν κάποιο πρόβλημα.
|
||||
SharedFileNameLabel=Ονομα Αρχείου:
|
||||
SharedFileLocationLabel=Τοποθεσία:
|
||||
WizardUninstalling=Πρόοδος Απεγκατάστασης:
|
||||
StatusUninstalling=Απεγκατάσταση του %1...
|
||||
|
||||
[CustomMessages]
|
||||
NameAndVersion=%1 έκδοση %2
|
||||
AdditionalIcons=Επιπλέον εικονίδια:
|
||||
CreateDesktopIcon=Δημιουργία ενός &εικονιδίου στην επιφάνεια εργασίας
|
||||
CreateQuickLaunchIcon=Δημιουργία ενός εικονιδίου στη &Γρήγορη Εκκίνηση
|
||||
ProgramOnTheWeb=Το %1 στο Internet
|
||||
UninstallProgram=Απεγκατάσταση του %1
|
||||
LaunchProgram=Εκκίνηση του %1
|
||||
AssocFileExtension=%Αντιστοίχιση του %1 με την %2 επέκταση αρχείου
|
||||
AssocingFileExtension=Γίνεται αντιστοίχηση του %1 με την %2 επέκταση αρχείου...
|
||||
|
||||
@@ -1,295 +0,0 @@
|
||||
;* Process Hacker 2 - Installer script
|
||||
;*
|
||||
;* Copyright (C) 2010 XhmikosR
|
||||
;*
|
||||
;* This file is part of Process Hacker.
|
||||
;*
|
||||
;* Process Hacker is free software; you can redistribute it and/or modify
|
||||
;* it under the terms of the GNU General Public License as published by
|
||||
;* the Free Software Foundation, either version 3 of the License, or
|
||||
;* (at your option) any later version.
|
||||
;*
|
||||
;* Process Hacker 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 General Public License for more details.
|
||||
;*
|
||||
;* You should have received a copy of the GNU General Public License
|
||||
;* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
|
||||
;
|
||||
;
|
||||
;
|
||||
; Requirements:
|
||||
; *Inno Setup QuickStart Pack v5.3.10(+): http://www.jrsoftware.org/isdl.php#qsp
|
||||
|
||||
|
||||
#define installer_build_number "03"
|
||||
|
||||
#define VerMajor
|
||||
#define VerMinor
|
||||
#define VerRevision
|
||||
#define VerBuild
|
||||
|
||||
#expr ParseVersion("..\..\bin\Release32\ProcessHacker.exe", VerMajor, VerMinor, VerRevision, VerBuild)
|
||||
#define app_version str(VerMajor) + "." + str(VerMinor) + "." + str(VerRevision) + "." + str(VerBuild)
|
||||
#define simple_app_version str(VerMajor) + "." + str(VerMinor)
|
||||
#define installer_build_date GetDateTimeString('mmm, d yyyy', '', '')
|
||||
|
||||
|
||||
[Setup]
|
||||
AppID=Process_Hacker2
|
||||
AppCopyright=Copyright © 2010, Process Hacker Team. Licensed under the GNU GPL, v3.
|
||||
AppContact=http://sourceforge.net/tracker/?group_id=242527
|
||||
AppName=Process Hacker
|
||||
AppVerName=Process Hacker {#= simple_app_version}
|
||||
AppVersion={#= simple_app_version}
|
||||
AppPublisher=wj32
|
||||
AppPublisherURL=http://processhacker.sourceforge.net/
|
||||
AppSupportURL=http://sourceforge.net/tracker/?group_id=242527
|
||||
AppUpdatesURL=http://processhacker.sourceforge.net/
|
||||
UninstallDisplayName=Process Hacker {#= simple_app_version}
|
||||
DefaultDirName={pf}\Process Hacker 2
|
||||
DefaultGroupName=Process Hacker 2
|
||||
VersionInfoCompany=wj32
|
||||
VersionInfoCopyright=Licensed under the GNU GPL, v3.
|
||||
VersionInfoDescription=Process Hacker {#= simple_app_version} Setup
|
||||
VersionInfoTextVersion={#= simple_app_version}
|
||||
VersionInfoVersion={#= simple_app_version}
|
||||
VersionInfoProductName=Process Hacker
|
||||
VersionInfoProductVersion={#= simple_app_version}
|
||||
VersionInfoProductTextVersion={#= simple_app_version}
|
||||
MinVersion=0,5.01.2600sp2
|
||||
AppReadmeFile={app}\Help.htm
|
||||
LicenseFile=..\..\LICENSE.txt
|
||||
InfoAfterFile=..\..\CHANGELOG.txt
|
||||
;InfoBeforeFile=..\..\doc\Help.htm
|
||||
SetupIconFile=..\..\ProcessHacker\ProcessHacker.ico
|
||||
UninstallDisplayIcon={app}\ProcessHacker.exe
|
||||
WizardImageFile=Icons\ProcessHackerLarge.bmp
|
||||
WizardSmallImageFile=Icons\ProcessHackerSmall.bmp
|
||||
OutputDir=.
|
||||
OutputBaseFilename=processhacker-{#= simple_app_version}-setup
|
||||
AllowNoIcons=yes
|
||||
Compression=lzma2/max
|
||||
SolidCompression=yes
|
||||
EnableDirDoesntExistWarning=no
|
||||
DirExistsWarning=no
|
||||
ShowTasksTreeLines=yes
|
||||
AlwaysShowDirOnReadyPage=yes
|
||||
AlwaysShowGroupOnReadyPage=yes
|
||||
PrivilegesRequired=admin
|
||||
ShowLanguageDialog=auto
|
||||
DisableDirPage=auto
|
||||
DisableProgramGroupPage=auto
|
||||
AppMutex=Global\ProcessHacker2Mutant
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
|
||||
|
||||
[Languages]
|
||||
; Installer's languages
|
||||
Name: en; MessagesFile: compiler:Default.isl
|
||||
Name: de; MessagesFile: compiler:Languages\German.isl
|
||||
Name: gr; MessagesFile: Languages\Greek.isl
|
||||
|
||||
|
||||
; Include the installer's custom messages and services stuff
|
||||
#include "Custom_Messages.iss"
|
||||
#include "Services.iss"
|
||||
|
||||
|
||||
[Messages]
|
||||
BeveledLabel=Process Hacker v{#= simple_app_version} by wj32, Setup v{#= installer_build_number} built on {#= installer_build_date}
|
||||
|
||||
|
||||
[Files]
|
||||
Source: ..\..\CHANGELOG.txt; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\..\LICENSE.txt; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\..\doc\Help.htm; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\..\tools\peview\bin\Release32\peview.exe; DestDir: {app}; Flags: ignoreversion; Check: NOT Is64BitInstallMode()
|
||||
Source: ..\..\tools\peview\bin\Release64\peview.exe; DestDir: {app}; Flags: ignoreversion; Check: Is64BitInstallMode()
|
||||
Source: ..\..\bin\Release32\ProcessHacker.exe; DestDir: {app}; Flags: ignoreversion; Check: NOT Is64BitInstallMode()
|
||||
Source: ..\..\bin\Release64\ProcessHacker.exe; DestDir: {app}; Flags: ignoreversion; Check: Is64BitInstallMode()
|
||||
Source: ..\..\KProcessHacker\i386\kprocesshacker.sys; DestDir: {app}; Flags: ignoreversion; Check: NOT Is64BitInstallMode()
|
||||
Source: ..\..\KProcessHacker\amd64\kprocesshacker.sys; DestDir: {app}; Flags: ignoreversion; Check: Is64BitInstallMode()
|
||||
Source: Icons\uninstall.ico; DestDir: {app}; Flags: ignoreversion
|
||||
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
|
||||
Name: desktopicon\user; Description: {cm:tsk_CurrentUser}; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive
|
||||
Name: desktopicon\common; Description: {cm:tsk_AllUsers}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked exclusive
|
||||
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0,6.01; Flags: unchecked
|
||||
|
||||
Name: startup_task; Description: {cm:tsk_StartupDescr}; GroupDescription: {cm:tsk_Startup}; Check: StartupCheck(); Flags: unchecked checkablealone
|
||||
;Name: startup_task\minimized; Description: {cm:tsk_StartupDescrMin}; GroupDescription: {cm:tsk_Startup}; Check: StartupCheck(); Flags: unchecked
|
||||
Name: remove_startup_task; Description: {cm:tsk_RemoveStartup}; GroupDescription: {cm:tsk_Startup}; Check: NOT StartupCheck(); Flags: unchecked
|
||||
|
||||
Name: create_KPH_service; Description: {cm:tsk_CreateKPHService}; GroupDescription: {cm:tsk_Other}; Check: NOT KPHServiceCheck() AND NOT Is64BitInstallMode(); Flags: unchecked
|
||||
Name: delete_KPH_service; Description: {cm:tsk_DeleteKPHService}; GroupDescription: {cm:tsk_Other}; Check: KPHServiceCheck() AND NOT Is64BitInstallMode(); Flags: unchecked
|
||||
|
||||
Name: reset_settings; Description: {cm:tsk_ResetSettings}; GroupDescription: {cm:tsk_Other}; Check: SettingsExistCheck(); Flags: checkedonce unchecked
|
||||
|
||||
Name: set_default_taskmgr; Description: {cm:tsk_SetDefaultTaskmgr}; GroupDescription: {cm:tsk_Other}; Check: PHDefaulTaskmgrCheck(); Flags: unchecked
|
||||
Name: restore_taskmgr; Description: {cm:tsk_RestoreTaskmgr}; GroupDescription: {cm:tsk_Other}; Check: NOT PHDefaulTaskmgrCheck(); Flags: unchecked
|
||||
|
||||
|
||||
[Icons]
|
||||
Name: {group}\peview; Filename: {app}\peview.exe; Comment: peview; WorkingDir: {app}; IconFilename: {app}\peview.exe; IconIndex: 0
|
||||
Name: {group}\Process Hacker 2; Filename: {app}\ProcessHacker.exe; Comment: Process Hacker {#= simple_app_version}; WorkingDir: {app}; IconFilename: {app}\ProcessHacker.exe; IconIndex: 0
|
||||
Name: {group}\{cm:sm_Help}\{cm:sm_Changelog}; Filename: {app}\CHANGELOG.txt; Comment: {cm:sm_com_Changelog}; WorkingDir: {app}
|
||||
Name: {group}\{cm:sm_Help}\{cm:sm_HelpFile}; Filename: {app}\Help.htm; Comment: {cm:sm_HelpFile}; WorkingDir: {app}
|
||||
Name: {group}\{cm:sm_Help}\{cm:ProgramOnTheWeb,Process Hacker 2}; Filename: http://processhacker.sourceforge.net/; Comment: {cm:ProgramOnTheWeb,Process Hacker 2}
|
||||
Name: {group}\{cm:UninstallProgram,Process Hacker 2}; Filename: {uninstallexe}; IconFilename: {app}\uninstall.ico; Comment: {cm:UninstallProgram,Process Hacker 2}; WorkingDir: {app}
|
||||
|
||||
Name: {commondesktop}\Process Hacker 2; Filename: {app}\ProcessHacker.exe; Tasks: desktopicon\common; Comment: Process Hacker {#= simple_app_version}; WorkingDir: {app}; IconFilename: {app}\ProcessHacker.exe; IconIndex: 0
|
||||
Name: {userdesktop}\Process Hacker 2; Filename: {app}\ProcessHacker.exe; Tasks: desktopicon\user; Comment: Process Hacker {#= simple_app_version}; WorkingDir: {app}; IconFilename: {app}\ProcessHacker.exe; IconIndex: 0
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Process Hacker 2; Filename: {app}\ProcessHacker.exe; Tasks: quicklaunchicon; Comment: Process Hacker {#= simple_app_version}; WorkingDir: {app}; IconFilename: {app}\ProcessHacker.exe; IconIndex: 0
|
||||
|
||||
|
||||
[InstallDelete]
|
||||
Type: files; Name: {userdesktop}\Process Hacker 2.lnk; Tasks: NOT desktopicon\user
|
||||
Type: files; Name: {commondesktop}\Process Hacker 2.lnk; Tasks: NOT desktopicon\common
|
||||
|
||||
Type: files; Name: {userappdata}\Process Hacker 2\settings.xml; Tasks: reset_settings
|
||||
Type: dirifempty; Name: {userappdata}\Process Hacker; Tasks: reset_settings
|
||||
|
||||
|
||||
[Registry]
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe; Flags: uninsdeletekeyifempty dontcreatekey
|
||||
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: Process Hacker 2; ValueData: """{app}\ProcessHacker.exe"""; Tasks: startup_task; Flags: uninsdeletevalue
|
||||
;Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: Process Hacker 2; ValueData: """{app}\ProcessHacker.exe"" -m"; Tasks: startup_task\minimized; Flags: uninsdeletevalue
|
||||
Root: HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Run; ValueName: Process Hacker 2; Tasks: remove_startup_task; Flags: deletevalue uninsdeletevalue
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe; ValueType: string; ValueName: Debugger; ValueData: """{app}\ProcessHacker.exe"""; Tasks: set_default_taskmgr
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe; ValueType: string; ValueName: Debugger; ValueData: """{app}\ProcessHacker.exe"""; Flags: uninsdeletevalue; Check: NOT PHDefaulTaskmgrCheck()
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe; ValueName: Debugger; Tasks: restore_taskmgr reset_settings; Flags: deletevalue uninsdeletevalue; Check: NOT PHDefaulTaskmgrCheck()
|
||||
|
||||
|
||||
[Run]
|
||||
Filename: {app}\ProcessHacker.exe; Description: {cm:LaunchProgram,Process Hacker 2}; Flags: nowait postinstall skipifsilent runascurrentuser
|
||||
Filename: http://processhacker.sourceforge.net/; Description: {cm:run_VisitWebsite}; Flags: nowait postinstall skipifsilent shellexec runascurrentuser unchecked
|
||||
|
||||
|
||||
[Code]
|
||||
// Global variables and constants
|
||||
const installer_mutex_name = 'process_hacker2_setup_mutex';
|
||||
|
||||
|
||||
// Check if Process Hacker is configured to run on startup in order to control
|
||||
// startup choice from within the installer
|
||||
function StartupCheck(): Boolean;
|
||||
begin
|
||||
Result := True;
|
||||
if RegValueExists(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Run', 'Process Hacker 2') then
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
|
||||
// Check if Process Hacker's settings exist
|
||||
function SettingsExistCheck(): Boolean;
|
||||
begin
|
||||
Result := False;
|
||||
if FileExists(ExpandConstant('{userappdata}\Process Hacker 2\settings.xml')) then
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
|
||||
// Check if Process Hacker is set as the default Task Manager for Windows
|
||||
function PHDefaulTaskmgrCheck(): Boolean;
|
||||
var
|
||||
svalue: String;
|
||||
begin
|
||||
Result := True;
|
||||
if RegQueryStringValue(HKLM,
|
||||
'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe', 'Debugger', svalue) then begin
|
||||
if svalue = (ExpandConstant('"{app}\ProcessHacker.exe"')) then
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
// Check if KProcessHacker is installed as a service
|
||||
function KPHServiceCheck(): Boolean;
|
||||
var
|
||||
dvalue: DWORD;
|
||||
begin
|
||||
Result := False;
|
||||
if RegQueryDWordValue(HKLM, 'SYSTEM\CurrentControlSet\Services\KProcessHacker2', 'Start', dvalue) then begin
|
||||
if dvalue = 1 then
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Procedure CleanUpFiles();
|
||||
begin
|
||||
DeleteFile(ExpandConstant('{userappdata}\Process Hacker 2\settings.xml'));
|
||||
RemoveDir(ExpandConstant('{userappdata}\Process Hacker 2\'));
|
||||
end;
|
||||
|
||||
|
||||
Procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
case CurStep of ssInstall:
|
||||
begin
|
||||
if IsServiceRunning('KProcessHacker2') then begin
|
||||
StopService('KProcessHacker2');
|
||||
end;
|
||||
if IsTaskSelected('delete_KPH_service') then begin
|
||||
RemoveService('KProcessHacker2');
|
||||
end;
|
||||
end;
|
||||
ssPostInstall:
|
||||
begin
|
||||
if (KPHServiceCheck AND NOT IsTaskSelected('delete_KPH_service') OR (IsTaskSelected('create_KPH_service'))) then begin
|
||||
StopService('KProcessHacker2');
|
||||
RemoveService('KProcessHacker2');
|
||||
InstallService(ExpandConstant('{app}\kprocesshacker.sys'),'KProcessHacker2','KProcessHacker2','KProcessHacker2 driver',SERVICE_KERNEL_DRIVER,SERVICE_SYSTEM_START);
|
||||
StartService('KProcessHacker2');
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
// When uninstalling ask user to delete Process Hacker's settings
|
||||
// based on whether the settings file exists only
|
||||
if CurUninstallStep = usUninstall then begin
|
||||
StopService('KProcessHacker2');
|
||||
RemoveService('KProcessHacker2');
|
||||
if SettingsExistCheck then begin
|
||||
if MsgBox(ExpandConstant('{cm:msg_DeleteLogSettings}'),
|
||||
mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin
|
||||
CleanUpFiles;
|
||||
end;
|
||||
RemoveDir(ExpandConstant('{app}'));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
begin
|
||||
// Create a mutex for the installer and if it's already running then expose a message and stop installation
|
||||
Result := True;
|
||||
if CheckForMutexes(installer_mutex_name) then begin
|
||||
if not WizardSilent() then
|
||||
MsgBox(ExpandConstant('{cm:msg_SetupIsRunningWarning}'), mbCriticalError, MB_OK);
|
||||
exit;
|
||||
Result := False;
|
||||
end;
|
||||
CreateMutex(installer_mutex_name);
|
||||
end;
|
||||
|
||||
|
||||
function InitializeUninstall(): Boolean;
|
||||
begin
|
||||
Result := True;
|
||||
if CheckForMutexes(installer_mutex_name) then begin
|
||||
if not WizardSilent() then
|
||||
MsgBox(ExpandConstant('{cm:msg_SetupIsRunningWarning}'), mbCriticalError, MB_OK);
|
||||
exit;
|
||||
end;
|
||||
CreateMutex(installer_mutex_name);
|
||||
end;
|
||||
@@ -1,207 +0,0 @@
|
||||
;* Process Hacker - Various services functions
|
||||
;*
|
||||
;*
|
||||
;* This file is part of Process Hacker.
|
||||
;*
|
||||
;* Process Hacker is free software; you can redistribute it and/or modify
|
||||
;* it under the terms of the GNU General Public License as published by
|
||||
;* the Free Software Foundation, either version 3 of the License, or
|
||||
;* (at your option) any later version.
|
||||
;*
|
||||
;* Process Hacker 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 General Public License for more details.
|
||||
;*
|
||||
;* You should have received a copy of the GNU General Public License
|
||||
;* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#include "Custom_Messages.iss"
|
||||
|
||||
[Code]
|
||||
// Various service related functions
|
||||
// Source: http://tinyurl.com/ybwjpuq
|
||||
type
|
||||
SERVICE_STATUS = record
|
||||
dwServiceType : cardinal;
|
||||
dwCurrentState : cardinal;
|
||||
dwControlsAccepted : cardinal;
|
||||
dwWin32ExitCode : cardinal;
|
||||
dwServiceSpecificExitCode : cardinal;
|
||||
dwCheckPoint : cardinal;
|
||||
dwWaitHint : cardinal;
|
||||
end;
|
||||
HANDLE = cardinal;
|
||||
|
||||
const
|
||||
SERVICE_QUERY_CONFIG = $1;
|
||||
SERVICE_CHANGE_CONFIG = $2;
|
||||
SERVICE_QUERY_STATUS = $4;
|
||||
SERVICE_START = $10;
|
||||
SERVICE_STOP = $20;
|
||||
SERVICE_ALL_ACCESS = $f01ff;
|
||||
SC_MANAGER_ALL_ACCESS = $f003f;
|
||||
SERVICE_KERNEL_DRIVER = $1;
|
||||
SERVICE_WIN32_OWN_PROCESS = $10;
|
||||
SERVICE_WIN32_SHARE_PROCESS = $20;
|
||||
SERVICE_WIN32 = $30;
|
||||
SERVICE_INTERACTIVE_PROCESS = $100;
|
||||
SERVICE_BOOT_START = $0;
|
||||
SERVICE_SYSTEM_START = $1;
|
||||
SERVICE_AUTO_START = $2;
|
||||
SERVICE_DEMAND_START = $3;
|
||||
SERVICE_DISABLED = $4;
|
||||
SERVICE_DELETE = $10000;
|
||||
SERVICE_CONTROL_STOP = $1;
|
||||
SERVICE_CONTROL_PAUSE = $2;
|
||||
SERVICE_CONTROL_CONTINUE = $3;
|
||||
SERVICE_CONTROL_INTERROGATE = $4;
|
||||
SERVICE_STOPPED = $1;
|
||||
SERVICE_START_PENDING = $2;
|
||||
SERVICE_STOP_PENDING = $3;
|
||||
SERVICE_RUNNING = $4;
|
||||
SERVICE_CONTINUE_PENDING = $5;
|
||||
SERVICE_PAUSE_PENDING = $6;
|
||||
SERVICE_PAUSED = $7;
|
||||
|
||||
// #######################################################################################
|
||||
// nt based service utilities
|
||||
// #######################################################################################
|
||||
function OpenSCManager(lpMachineName, lpDatabaseName: AnsiString; dwDesiredAccess :cardinal): HANDLE;
|
||||
external 'OpenSCManagerA@advapi32.dll stdcall';
|
||||
|
||||
function OpenService(hSCManager :HANDLE;lpServiceName: AnsiString; dwDesiredAccess :cardinal): HANDLE;
|
||||
external 'OpenServiceA@advapi32.dll stdcall';
|
||||
|
||||
function CloseServiceHandle(hSCObject :HANDLE): Boolean;
|
||||
external 'CloseServiceHandle@advapi32.dll stdcall';
|
||||
|
||||
function CreateService(hSCManager :HANDLE;lpServiceName, lpDisplayName: AnsiString;dwDesiredAccess,dwServiceType,dwStartType,dwErrorControl: cardinal;lpBinaryPathName,lpLoadOrderGroup: AnsiString; lpdwTagId : cardinal;lpDependencies,lpServiceStartName,lpPassword :AnsiString): cardinal;
|
||||
external 'CreateServiceA@advapi32.dll stdcall';
|
||||
|
||||
function DeleteService(hService :HANDLE): Boolean;
|
||||
external 'DeleteService@advapi32.dll stdcall';
|
||||
|
||||
function StartNTService(hService :HANDLE;dwNumServiceArgs : cardinal;lpServiceArgVectors : cardinal) : Boolean;
|
||||
external 'StartServiceA@advapi32.dll stdcall';
|
||||
|
||||
function ControlService(hService :HANDLE; dwControl :cardinal;var ServiceStatus :SERVICE_STATUS) : Boolean;
|
||||
external 'ControlService@advapi32.dll stdcall';
|
||||
|
||||
function QueryServiceStatus(hService :HANDLE;var ServiceStatus :SERVICE_STATUS) : Boolean;
|
||||
external 'QueryServiceStatus@advapi32.dll stdcall';
|
||||
|
||||
function QueryServiceStatusEx(hService :HANDLE;ServiceStatus :SERVICE_STATUS) : Boolean;
|
||||
external 'QueryServiceStatus@advapi32.dll stdcall';
|
||||
|
||||
|
||||
function OpenServiceManager() : HANDLE;
|
||||
begin
|
||||
if UsingWinNT() = true then begin
|
||||
Result := OpenSCManager('','ServicesActive',SC_MANAGER_ALL_ACCESS);
|
||||
if Result = 0 then
|
||||
MsgBox(ExpandConstant('{cm:msg_servicemanager}'), mbError, MB_OK)
|
||||
end
|
||||
else begin
|
||||
MsgBox(ExpandConstant('{cm:msg_servicemanager2}'), mbError, MB_OK)
|
||||
Result := 0;
|
||||
end
|
||||
end;
|
||||
|
||||
|
||||
function InstallService(FileName, ServiceName, DisplayName, Description : AnsiString;ServiceType,StartType :cardinal) : Boolean;
|
||||
var
|
||||
hSCM : HANDLE;
|
||||
hService: HANDLE;
|
||||
begin
|
||||
hSCM := OpenServiceManager();
|
||||
Result := False;
|
||||
if hSCM <> 0 then begin
|
||||
hService := CreateService(hSCM,ServiceName,DisplayName,SERVICE_ALL_ACCESS,ServiceType,StartType,0,FileName,'',0,'','','');
|
||||
if hService <> 0 then begin
|
||||
Result := true;
|
||||
// Win2K & WinXP supports aditional description text for services
|
||||
if Description<> '' then
|
||||
RegWriteStringValue(HKLM,'System\CurrentControlSet\Services\' + ServiceName,'Description',Description);
|
||||
CloseServiceHandle(hService)
|
||||
end;
|
||||
CloseServiceHandle(hSCM)
|
||||
end
|
||||
end;
|
||||
|
||||
|
||||
function RemoveService(ServiceName: String) : Boolean;
|
||||
var
|
||||
hSCM : HANDLE;
|
||||
hService: HANDLE;
|
||||
begin
|
||||
hSCM := OpenServiceManager();
|
||||
Result := False;
|
||||
if hSCM <> 0 then begin
|
||||
hService := OpenService(hSCM,ServiceName,SERVICE_DELETE);
|
||||
if hService <> 0 then begin
|
||||
Result := DeleteService(hService);
|
||||
CloseServiceHandle(hService)
|
||||
end;
|
||||
CloseServiceHandle(hSCM)
|
||||
end
|
||||
end;
|
||||
|
||||
|
||||
function StartService(ServiceName: String) : Boolean;
|
||||
var
|
||||
hSCM : HANDLE;
|
||||
hService: HANDLE;
|
||||
begin
|
||||
hSCM := OpenServiceManager();
|
||||
Result := False;
|
||||
if hSCM <> 0 then begin
|
||||
hService := OpenService(hSCM,ServiceName,SERVICE_START);
|
||||
if hService <> 0 then begin
|
||||
Result := StartNTService(hService,0,0);
|
||||
CloseServiceHandle(hService)
|
||||
end;
|
||||
CloseServiceHandle(hSCM)
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function StopService(ServiceName: String) : Boolean;
|
||||
var
|
||||
hSCM : HANDLE;
|
||||
hService: HANDLE;
|
||||
Status : SERVICE_STATUS;
|
||||
begin
|
||||
hSCM := OpenServiceManager();
|
||||
Result := False;
|
||||
if hSCM <> 0 then begin
|
||||
hService := OpenService(hSCM,ServiceName,SERVICE_STOP);
|
||||
if hService <> 0 then begin
|
||||
Result := ControlService(hService,SERVICE_CONTROL_STOP,Status);
|
||||
CloseServiceHandle(hService)
|
||||
end;
|
||||
CloseServiceHandle(hSCM)
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function IsServiceRunning(ServiceName: String) : Boolean;
|
||||
var
|
||||
hSCM : HANDLE;
|
||||
hService: HANDLE;
|
||||
Status : SERVICE_STATUS;
|
||||
begin
|
||||
hSCM := OpenServiceManager();
|
||||
Result := False;
|
||||
if hSCM <> 0 then begin
|
||||
hService := OpenService(hSCM,ServiceName,SERVICE_QUERY_STATUS);
|
||||
if hService <> 0 then begin
|
||||
if QueryServiceStatus(hService,Status) then begin
|
||||
Result :=(Status.dwCurrentState = SERVICE_RUNNING)
|
||||
end;
|
||||
CloseServiceHandle(hService)
|
||||
end;
|
||||
CloseServiceHandle(hSCM)
|
||||
end
|
||||
end;
|
||||
@@ -77,6 +77,8 @@ for %%a in (
|
||||
phdk.h
|
||||
) do copy ..\..\ProcessHacker\sdk\%%a ..\..\sdk\include\%%a
|
||||
|
||||
copy ..\..\ProcessHacker\mxml\mxml.h ..\..\sdk\include\mxml.h
|
||||
|
||||
rem Libraries
|
||||
|
||||
copy ..\..\lib\lib32\ntdll.lib ..\..\sdk\lib\i386\
|
||||
|
||||
Reference in New Issue
Block a user