ReactOS 0.4.15-dev-5853-gcb454ef
unattended.cpp File Reference
#include "rapps.h"
#include "unattended.h"
#include "winmain.h"
#include <setupapi.h>
#include <conutils.h>
Include dependency graph for unattended.cpp:

Go to the source code of this file.

Functions

static BOOL MatchCmdOption (LPWSTR argvOption, LPCWSTR szOptToMacth)
 
static void InitRappsConsole ()
 
static BOOL HandleInstallCommand (CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
 
static BOOL HandleSetupCommand (CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
 
static BOOL HandleFindCommand (CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
 
static BOOL HandleInfoCommand (CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
 
static VOID PrintHelpCommand ()
 
BOOL ParseCmdAndExecute (LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
 

Function Documentation

◆ HandleFindCommand()

static BOOL HandleFindCommand ( CAppDB db,
LPWSTR  szCommand,
int  argcLeft,
LPWSTR argvLeft 
)
static

Definition at line 109 of file unattended.cpp.

110{
111 if (argcLeft < 1)
112 {
114 return FALSE;
115 }
116
119
120 for (int i = 0; i < argcLeft; i++)
121 {
122 LPCWSTR lpszSearch = argvLeft[i];
124
125 POSITION CurrentListPosition = List.GetHeadPosition();
126 while (CurrentListPosition)
127 {
128 CAppInfo *Info = List.GetNext(CurrentListPosition);
129
130 if (SearchPatternMatch(Info->szDisplayName, lpszSearch) || SearchPatternMatch(Info->szComments, lpszSearch))
131 {
132 ConPrintf(StdOut, L"%s (%s)\n", Info->szDisplayName.GetString(), Info->szIdentifier.GetString());
133 }
134 }
135
136 ConPrintf(StdOut, L"\n");
137 }
138
139 return TRUE;
140}
@ ENUM_ALL_AVAILABLE
Definition: appinfo.h:26
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define StdOut
Definition: fc.c:14
BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
Definition: misc.cpp:372
#define IDS_CMD_FIND_RESULT_FOR
Definition: resource.h:227
#define IDS_CMD_NEED_PARAMS
Definition: resource.h:225
VOID GetApps(CAtlList< CAppInfo * > &List, AppsCategories Type) const
Definition: appdb.cpp:53
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define L(x)
Definition: ntvdm.h:50
INT __cdecl ConResMsgPrintf(IN PCON_STREAM Stream, IN DWORD dwFlags, IN UINT uID,...)
Definition: outstream.c:1461
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by ParseCmdAndExecute().

◆ HandleInfoCommand()

static BOOL HandleInfoCommand ( CAppDB db,
LPWSTR  szCommand,
int  argcLeft,
LPWSTR argvLeft 
)
static

Definition at line 143 of file unattended.cpp.

144{
145 if (argcLeft < 1)
146 {
148 return FALSE;
149 }
150
151 for (int i = 0; i < argcLeft; i++)
152 {
153 LPCWSTR PackageName = argvLeft[i];
154 CAppInfo *AppInfo = db->FindByPackageName(PackageName);
155 if (!AppInfo)
156 {
158 }
159 else
160 {
162
163 ConPuts(StdOut, AppInfo->szDisplayName);
164
165 if (!AppInfo->szDisplayVersion.IsEmpty())
166 {
169 }
170
171 CStringW License, Size, UrlSite, UrlDownload;
172 AppInfo->GetDisplayInfo(License, Size, UrlSite, UrlDownload);
173
174 if (!License.IsEmpty())
175 {
177 ConPuts(StdOut, License);
178 }
179
180 if (!Size.IsEmpty())
181 {
184 }
185
186 if (!UrlSite.IsEmpty())
187 {
189 ConPuts(StdOut, UrlSite);
190 }
191
192 if (AppInfo->szComments)
193 {
195 ConPuts(StdOut, AppInfo->szComments);
196 }
197
198 if (!UrlDownload.IsEmpty())
199 {
201 ConPuts(StdOut, UrlDownload);
202 }
203 ConPuts(StdOut, L"\n");
204 }
205 ConPuts(StdOut, L"\n");
206 }
207 return TRUE;
208}
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define IDS_AINFO_SIZE
Definition: resource.h:163
#define IDS_AINFO_VERSION
Definition: resource.h:161
#define IDS_CMD_PACKAGE_INFO
Definition: resource.h:229
#define IDS_AINFO_LICENSE
Definition: resource.h:165
#define IDS_AINFO_DESCRIPTION
Definition: resource.h:162
#define IDS_AINFO_URLSITE
Definition: resource.h:164
#define IDS_AINFO_URLDOWNLOAD
Definition: resource.h:166
#define IDS_CMD_PACKAGE_NOT_FOUND
Definition: resource.h:228
bool IsEmpty() const
Definition: atlsimpstr.h:379
CAppInfo * FindByPackageName(const CStringW &name)
Definition: appdb.cpp:38
CStringW szComments
Definition: appinfo.h:80
CStringW szDisplayName
Definition: appinfo.h:78
virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload)=0
CStringW szDisplayVersion
Definition: appinfo.h:79
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533

Referenced by ParseCmdAndExecute().

◆ HandleInstallCommand()

static BOOL HandleInstallCommand ( CAppDB db,
LPWSTR  szCommand,
int  argcLeft,
LPWSTR argvLeft 
)
static

Definition at line 47 of file unattended.cpp.

48{
49 if (argcLeft < 1)
50 {
53 return FALSE;
54 }
55
56 CAtlList<CAppInfo *> Applications;
57 for (int i = 0; i < argcLeft; i++)
58 {
59 LPCWSTR PackageName = argvLeft[i];
60 CAppInfo *AppInfo = db->FindByPackageName(PackageName);
61 if (AppInfo)
62 {
63 Applications.AddTail(AppInfo);
64 }
65 }
66
67 return DownloadListOfApplications(Applications, TRUE);
68}
#define IDS_CMD_NEED_PACKAGE_NAME
Definition: resource.h:223
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:624
BOOL DownloadListOfApplications(const CAtlList< CAppInfo * > &AppsList, BOOL bIsModal)
Definition: loaddlg.cpp:1055
static void InitRappsConsole()
Definition: unattended.cpp:31

Referenced by ParseCmdAndExecute().

◆ HandleSetupCommand()

static BOOL HandleSetupCommand ( CAppDB db,
LPWSTR  szCommand,
int  argcLeft,
LPWSTR argvLeft 
)
static

Definition at line 71 of file unattended.cpp.

72{
73 if (argcLeft != 1)
74 {
77 return FALSE;
78 }
79
80 CAtlList<CAppInfo *> Applications;
81 HINF InfHandle = SetupOpenInfFileW(argvLeft[0], NULL, INF_STYLE_WIN4, NULL);
82 if (InfHandle == INVALID_HANDLE_VALUE)
83 {
84 return FALSE;
85 }
86
88 if (SetupFindFirstLineW(InfHandle, L"RAPPS", L"Install", &Context))
89 {
90 WCHAR szPkgName[MAX_PATH];
91 do
92 {
93 if (SetupGetStringFieldW(&Context, 1, szPkgName, _countof(szPkgName), NULL))
94 {
95 CAppInfo *AppInfo = db->FindByPackageName(szPkgName);
96 if (AppInfo)
97 {
98 Applications.AddTail(AppInfo);
99 }
100 }
101 } while (SetupFindNextLine(&Context, &Context));
102 }
103 SetupCloseInfFile(InfHandle);
104
105 return DownloadListOfApplications(Applications, TRUE);
106}
#define IDS_CMD_NEED_FILE_NAME
Definition: resource.h:224
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define MAX_PATH
Definition: compat.h:34
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
Definition: parser.c:1229
#define INF_STYLE_WIN4
Definition: infsupp.h:41
#define _countof(array)
Definition: sndvol32.h:68
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
Definition: infsupp.c:184
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
Definition: infsupp.c:54
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
Definition: infsupp.c:80
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
Definition: infsupp.c:43
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ParseCmdAndExecute().

◆ InitRappsConsole()

static void InitRappsConsole ( )
static

Definition at line 31 of file unattended.cpp.

32{
33 // First, try to attach to our parent's console
35 {
36 // Did we already have a console?
38 {
39 // No, try to open a new one
41 }
42 }
43 ConInitStdStreams(); // Initialize the Console Standard Streams
44}
#define ConInitStdStreams()
Definition: fc.c:13
BOOL WINAPI AllocConsole(VOID)
Definition: console.c:74
BOOL WINAPI AttachConsole(IN DWORD dwProcessId)
Definition: console.c:147
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
DWORD WINAPI GetLastError(void)
Definition: except.c:1040
#define ATTACH_PARENT_PROCESS
Definition: wincon.h:21

Referenced by HandleInstallCommand(), HandleSetupCommand(), and ParseCmdAndExecute().

◆ MatchCmdOption()

static BOOL MatchCmdOption ( LPWSTR  argvOption,
LPCWSTR  szOptToMacth 
)
static

Definition at line 16 of file unattended.cpp.

17{
18 WCHAR FirstCharList[] = {L'-', L'/'};
19
20 for (UINT i = 0; i < _countof(FirstCharList); i++)
21 {
22 if (argvOption[0] == FirstCharList[i])
23 {
24 return StrCmpIW(argvOption + 1, szOptToMacth) == 0;
25 }
26 }
27 return FALSE;
28}
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
Definition: string.c:353
unsigned int UINT
Definition: ndis.h:50

Referenced by ParseCmdAndExecute().

◆ ParseCmdAndExecute()

BOOL ParseCmdAndExecute ( LPWSTR  lpCmdLine,
BOOL  bIsFirstLaunch,
int  nCmdShow 
)

Definition at line 222 of file unattended.cpp.

223{
224 INT argc;
225 LPWSTR *argv = CommandLineToArgvW(lpCmdLine, &argc);
226
227 if (!argv)
228 {
229 return FALSE;
230 }
231
234 CAppDB db(Directory);
235
236 if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch)
237 {
238 db.RemoveCached();
239 }
240 db.UpdateAvailable();
241 db.UpdateInstalled();
242
243 if (argc == 1) // RAPPS is launched without options
244 {
245 // Check for if rapps MainWindow is already launched in another process
247
250 {
251 /* If already started, it is found its window */
253
254 /* Activate window */
255 ShowWindow(hWindow, SW_SHOWNORMAL);
256 SetForegroundWindow(hWindow);
257 return FALSE;
258 }
259
260 MainWindowLoop(&db, nCmdShow);
261
262 if (hMutex)
264
265 return TRUE;
266 }
267
269 {
270 return HandleInstallCommand(&db, argv[1], argc - 2, argv + 2);
271 }
272 else if (MatchCmdOption(argv[1], CMD_KEY_SETUP))
273 {
274 return HandleSetupCommand(&db, argv[1], argc - 2, argv + 2);
275 }
276
278
280 {
281 return HandleFindCommand(&db, argv[1], argc - 2, argv + 2);
282 }
283 else if (MatchCmdOption(argv[1], CMD_KEY_INFO))
284 {
285 return HandleInfoCommand(&db, argv[1], argc - 2, argv + 2);
286 }
288 {
290 return TRUE;
291 }
292 else
293 {
294 // unrecognized/invalid options
297 return FALSE;
298 }
299}
static int argc
Definition: ServiceArgs.c:12
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
BOOL GetStorageDirectory(CStringW &lpDirectory)
Definition: misc.cpp:145
#define IDS_CMD_INVALID_OPTION
Definition: resource.h:226
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:20
Definition: appdb.h:9
#define CloseHandle
Definition: compat.h:739
VOID MainWindowLoop(CAppDB *db, INT nShowCmd)
Definition: gui.cpp:788
const TCHAR szWindowClass[]
Definition: magnifier.c:28
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
HANDLE hMutex
Definition: mutex.c:11
#define argv
Definition: mplay32.c:18
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:80
base for all directory entries
Definition: entries.h:138
BOOL bUpdateAtStart
Definition: settings.h:8
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:576
int32_t INT
Definition: typedefs.h:58
static BOOL HandleInfoCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
Definition: unattended.cpp:143
static BOOL MatchCmdOption(LPWSTR argvOption, LPCWSTR szOptToMacth)
Definition: unattended.cpp:16
static BOOL HandleFindCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
Definition: unattended.cpp:109
static VOID PrintHelpCommand()
Definition: unattended.cpp:211
static BOOL HandleInstallCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
Definition: unattended.cpp:47
static BOOL HandleSetupCommand(CAppDB *db, LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
Definition: unattended.cpp:71
#define CMD_KEY_INFO
Definition: unattended.h:6
#define CMD_KEY_INSTALL
Definition: unattended.h:3
#define CMD_KEY_SETUP
Definition: unattended.h:4
#define CMD_KEY_HELP
Definition: unattended.h:7
#define CMD_KEY_HELP_ALT
Definition: unattended.h:8
#define CMD_KEY_FIND
Definition: unattended.h:5
#define SW_SHOWNORMAL
Definition: winuser.h:764
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
HWND WINAPI FindWindowW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by wWinMain().

◆ PrintHelpCommand()

static VOID PrintHelpCommand ( )
static

Definition at line 211 of file unattended.cpp.

212{
213 ConPrintf(StdOut, L"\n");
215 ConPrintf(StdOut, L"\n\n");
216
218 ConPrintf(StdOut, L"%ls\n", UsageString);
219}
#define IDS_APPTITLE
Definition: resource.h:3
#define IDS_CMD_USAGE
Definition: resource.h:222
const WCHAR UsageString[]
Definition: unattended.h:11

Referenced by ParseCmdAndExecute().