-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathSharedConfig.xml
More file actions
511 lines (419 loc) · 22 KB
/
Copy pathSharedConfig.xml
File metadata and controls
511 lines (419 loc) · 22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
<?xml version="1.0" encoding="UTF-8"?>
<!--
Development note:
This file is copied to the bin folder.
DIRIGENT_SHAREDCONFDIR is set to the bin folder for apps started from Visual Studio.
-->
<Shared>
<!-- Free apps (app defaults if an app is not part of any plan, having own app definition -->
<App AppIdTuple = "m1.a" Template = "apps.notepad" Groups="Folder Free"/>
<!-- Plans -->
<Plan Name="plan1" StartTimeout="10" Groups="Test1">
<App
AppIdTuple = "m1.a"
Template = "apps.notepad"
ExeFullPath = "%SystemRoot%\notepad.exe"
StartupDir = "%USERPROFILE%\Documents"
CmdLineArgs = "aaa.txt"
XXX_InitCondition = "exitcode 0"
Groups="Folder 1"
MinKillingTime = "3.5"
DeElevate = "1"
>
<WindowPos titleregexp="\s-\sNotepad" rect="10,50,300,200" screen="1" keep="0" />
<File Path="%USERPROFILE%\Documents\aaa.txt"/>
<Folder Title="my folder" Path="D:\TEMP\BIST"/>
<FilePackage Id="pack_m1">
<!-- reference to machine-specific file-->
<FileRef Id="Greetings"/>
<!-- reference to application-specific file-->
<FileRef AppIdTuple = "m1.appWithFile" Id="xxx"/>
<!-- direct definition of independent file using UNC path-->
<File Id="global2" Path="\\server\share\path\to\file.txt"/>
<Tool Title="Browse files in package" Name="FileCmd" CmdLineArgs="%PACKAGE_LIST_FILE%"/>
<!-- real folder in the filesystem using glob-style globbing; empty mask means "**"-->
<Folder Id="fold1" Path="D:\TEMP" Mask="**/logs/**/*.{log,txt}" />
<!-- limits keeping a growing log folder from producing an unbounded download -->
<Folder Id="fold1recent" Title="recent logs only" Path="D:\TEMP" Mask="**/*.{log,txt}"
MaxSeconds="172800" MaxFiles="200" MaxTotalBytes="52428800" />
<!-- virtual folder is just like a sub-package containing real files, real folders, or virtual subfolders -->
<VFolder Id="vfold1">
<File Id="global3" Path="\\server\share\path\to\file.txt"/>
<FileRef AppIdTuple = "m1.appWithFile" Id="xxx"/>
<Folder Id="fold2" Path="D:\TEMP" />
<VFolder Id="vsubfold2">
<!-- NOT IMPLEMENTED YET (silently ignored): would resolve to the tree of files/filerefs/folders/vfolders provided by given script -->
<ScriptedContent Script="PackageScripts/Test1" Args=""/>
<File Id="inPackFile" Path="\\server\TEMP\file.txt"/>
</VFolder>
</VFolder>
</FilePackage>
</App>
<App
AppIdTuple = "m1.b"
Template = "apps.notepad"
StartupDir = "c:\"
CmdLineArgs = "bbb.txt"
Dependencies = "m1.a;"
/>
<App
AppIdTuple = "m2.c"
Template = "apps.notepad"
ExeFullPath = "c:\windows\notepad.exe"
StartupDir = "c:\"
CmdLineArgs = "ccc.txt"
/>
<App
AppIdTuple = "m1.d"
Template = "apps.cmd.show_vars"
Volatile = "1"
>
<Env>
<!-- Generic environment variable handling-->
<Set Variable="TMP" Value="X:\TEMP" />
<Set Variable="EXPANSION_TEST" Value="xxx%USERNAME%xxx" />
<!-- specific support for Path variable modifications-->
<Path Prepend="C:\BIN;%ProgramFiles%\MyApp\Bin;RelPath1\sub1;..\RelPath2\sub1" />
</Env>
</App>
<App
AppIdTuple = "m1.ShowEnvVars"
Template = "apps.cmd.show_vars"
ReusePrevVars = "1"
LeaveRunningWithPrevVars = "1"
>
</App>
<App
AppIdTuple = "m1.CpuStres"
ExeFullPath = "c:\utils\cpustres.exe"
>
</App>
<App
AppIdTuple = "m3.bash"
ExeFullPath = "/usr/bin/bash"
StartupDir = "%HOME%"
CmdLineArgs = "a.sh"
Volatile = "1"
>
</App>
<App
AppIdTuple = "m3.id"
ExeFullPath = "/usr/bin/id"
CmdLineArgs = ""
StartupDir = "%HOME%"
Volatile = "1"
>
</App>
</Plan>
<Plan Name="plan2" Groups="Test1" ApplyOnSelect="1">
<App
AppIdTuple = "m1.b"
Template = "apps.notepad"
ExeFullPath = "c:\windows\notepad.exe"
StartupDir = "c:\"
CmdLineArgs = "bbb.txt"
RestartOnCrash = "0"
Volatile = "1"
InitCondition = "exitcode 0"
Dependencies = "m1.a"
>
<File Id="Greetings" Path="%USERPROFILE%\Documents\Greetings2.txt">
<Tool Title="Open in Notepad" Name="Notepad++" />
</File>
</App>
</Plan>
<Plan Name="plan3">
<App
AppIdTuple = "m2.c"
Template = "apps.notepad"
ExeFullPath = "c:\windows\notepad.exe"
StartupDir = "c:\"
CmdLineArgs = "CCCx.txt"
InitCondition = "exitcode 0"
/>
</Plan>
<Plan Name="planX" Groups="Test2">
<App
AppIdTuple = "m1.x"
Template = "apps.notepad"
ExeFullPath = "c:\windows\notepad.exe"
StartupDir = "c:\"
CmdLineArgs = "xxx.txt"
InitCondition = "exitcode 0"
/>
</Plan>
<Plan Name="empty">
</Plan>
<!-- ==== A plan that marks the logs before anything starts writing =============================
The case this was built for: every start of the system draws a line under the logs, so that
whatever is collected afterwards belongs to this run and nothing older. See
docs/ScriptsInPlans.md.
The first step is not a process at all. ExeFullPath="[dirigent.command]" sends its
CmdLineArgs to the master as a CLI command, and InitCondition="cliresponse ..." is what makes
the plan WAIT for it: without that condition such a step counts as initialized the instant it
is launched (it has no process to exit), and the applications would start logging while the
mark was still being taken.
cliresponse ok - a mark that could not be taken fails the step, and so fails the plan
cliresponse any - the answer is still waited for, a failure is logged, the plan carries on
"any" here, because a missing mark only degrades a later collection - it will hold more than
one run - and must not stop the system from starting.
Two commands on one line, separated by ';': StartScript answers as soon as the script has
STARTED, so WaitForScript is what waits for it to be over. Both name the same guid.
Quoting, which bites: the JSON argument passes through the XML attribute and then the CLI
word tokenizer, and the tokenizer eats a single quote it reads as a delimiter. Doubling them
('' inside '...') is what delivers {Node:{Id:'pkg.run'}} to the script intact - and it needs
no XML escaping, unlike the double-quoted form. Note also that ';' is a command separator
everywhere on the line, so no argument may contain one. -->
<Plan Name="System Start (marks the logs first)" Groups="Examples">
<App AppIdTuple = "m1.mark_logs"
ExeFullPath = "[dirigent.command]"
CmdLineArgs = "StartScript 7B3C1E90-1111-2222-3333-444455556666 BuiltIns/MarkFiles.cs '{Node:{Id:''pkg.run''}}' ; WaitForScript 7B3C1E90-1111-2222-3333-444455556666 timeout=300"
Volatile = "1"
InitCondition = "cliresponse any"
/>
<!-- nothing starts until the mark has been drawn -->
<App AppIdTuple = "m1.a" Template = "apps.notepad" CmdLineArgs = "aaa.txt"
Dependencies = "m1.mark_logs" Volatile = "1"/>
</Plan>
<!-- single instance scripts in the Scripts tab -->
<Script Id="2d5b3159-83c6-48d4-9c52-0ce1af92cbb2" Title="Demo1 - built-in" Name="BuiltIns/DemoScript1.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script Id="0204745E-8867-4168-AE91-81B7D3449A1B" Title="Demo1 - from file #1" Name="%DIRIGENT_SHAREDCONFDIR%/Scripts/DemoScript1.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script Id="1204745E-8867-4168-AE91-81B7D3449A1B" Title="Demo1 - from file #2" Name="%DIRIGENT_SHAREDCONFDIR%/Scripts/DemoScript1.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script Id="2204745E-8867-4168-AE91-81B7D3449A1B" Title="Demo1 - from file #3" Name="%DIRIGENT_SHAREDCONFDIR%/Scripts/DemoScript1.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script Id="3204745E-8867-4168-AE91-81B7D3449A1B" Title="Demo1 - from file #4" Name="%DIRIGENT_SHAREDCONFDIR%/Scripts/DemoScript1.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script Id="4204745E-8867-4168-AE91-81B7D3449A1B" Title="DemoX - not found" Name="%DIRIGENT_SHAREDCONFDIR%/Scripts/UnexistingScriptFile.cs" Args="{SomeString:'řidič'}" Groups="Examples;;Common/Demo"/>
<Script
Id="22C526A2-6F7C-4B25-8233-7EF37619E1CB"
Title="Run Plan When Machines Online [built-in]"
Name="BuiltIns/RunPlanWhenMachinesOnline.cs"
Args="{plan:'plan1', timeout:0}"
Groups="Examples;;Common/Demo"
/>
<MainMenu>
<!-- script invoked on defined machine -->
<Script Title="Tools/Demo script menu item" Name="Scripts/DemoScript1.cs" Args="řidič" Groups="Examples;;Common/Demo" HostId="m1"/>
<!-- tool invoked on the machine where the menu was clicked unless non-empty HostId is specified. -->
<Tool Title="Tools/VNC to self" Name="VncViewer" Args="%MACHINE_IP%" HostId="m1" StartupDir="C:\TEMP" />
<Tool Title="Tools/VNC to self/sub 1" Name="VncViewer" Args="%MACHINE_IP%" Icon="Icons/ScriptRed.png" />
<Tool Title="Tools/VNC to self/sub 2" Name="VncViewer" Args="%MACHINE_IP%" Icon="Icons/ScriptGreen.png"/>
<Tool Title="Tools/sample batch script" Name="BatchScript" Args="test1.bat" StartupDir="C:\TEMP" HostId="m1" />
<!-- tool invoked on the machine where the menu was clicked, started in context of given file -->
<FileRef Title="File/Shared Config" Id="DirigentSharedConfig">
<Tool Title="Edit in Notepad++" Icon="Icons\Notepad++.png" Name="Notepad++" Args="%FILE_PATH%"/>
</FileRef>
<FilePackage Title="File/All Logs Package">
<FileRef Id="newest*"/>
</FilePackage>
<!-- ==== One test run, from the main menu =================================================
The whole cycle on the logs of every machine at once:
Clear - empty them, and where a file is held open by its application, draw a line
under it instead. Either way a later Download delivers only this run.
Mark - only draw the line, leaving the files in place.
Unmark - forget the line, so the next Download brings the files whole again.
Download - collect what came after the line into one zip, asking why first.
AskComment="1" puts a dialog in front of the collection and keeps the answer in
_comment.txt inside the archive, next to what could not be collected and why. It works
on any <Script> action, not only on a download. -->
<FilePackage Id="pkg.run" Title="File/Test run (Clear, Mark, Download)"
Description="One test run: clear the logs, run the case, download what it wrote.">
<FileRef Id="applog" MachineId="*" AppId="*"/>
<Script Title="Clear" Name="BuiltIns/ClearFiles.cs"/>
<Script Title="Mark" Name="BuiltIns/MarkFiles.cs"/>
<Script Title="Unmark" Name="BuiltIns/UnmarkFiles.cs"/>
<Script Title="Download" Name="BuiltIns/DownloadZipped.cs" AskComment="1"
Icon="Icons/Zipped.png"/>
</FilePackage>
</MainMenu>
<AppTemplate Name="apps.notepad"
Template = ""
ExeFullPath = "c:\windows\notepad.exe"
StartupDir = "c:\"
CmdLineArgs = ""
StartupOrder = "0"
RestartOnCrash = "1"
InitCondition = "timeout 2.0"
SeparationInterval = "0.5"
Groups="Folder 2"
>
<!-- direct definition of independent file using UNC path-->
<File Title="exe file" Path="c:\windows\notepad.exe">
<Script Title="Browse with DoubleCmd" Name="Builtins/BrowseInDblCmdVirtPanel.cs" />
</File>
</AppTemplate>
<AppTemplate Name="apps.cmd"
Template = ""
ExeFullPath = "c:\windows\system32\cmd.exe"
StartupDir = "c:\"
CmdLineArgs = ""
StartupOrder = "0"
RestartOnCrash = "0"
InitCondition = "timeout 2.0"
SeparationInterval = "0.5"
KillTree = "1"
WindowStyle = "normal"
/>
<AppTemplate Name="apps.bash"
Template = ""
ExeFullPath = "/usr/bin/bash"
StartupDir = ""
CmdLineArgs = ""
/>
<AppTemplate Name="apps.cmd.show_vars"
Template = "apps.cmd"
StartupDir = "c:\"
CmdLineArgs = "/k "set&&pause""
/>
<Machine Name="m1" IP="127.0.0.1">
<Share Name="C" Path="C:\"/>
<Share Name="D$" Path="d:\"/>
<File Id="Greetings" Path="%USERPROFILE%\Documents\Greetings.txt">
<Tool Title="Open in Notepad" Name="Notepad++" />
</File>
<!--File Id="newest log file" Path="C:\Logs\App1" Mask="*.txt" Recursive="1" Filter="Newest"-->
<File Id="newest temp file (1)" Path="%TEMP%" Filter="Newest">
<Tool Title="Open in Notepad" Name="Notepad++" />
</File>
<File Id="newest temp files (max. 5)" Path="%TEMP%" Filter="Newest" MaxFiles="5">
<Script Title="Download zipped file" Name="BuiltIns/DownloadZipped.cs" Icon="Icons/Zipped.png"/>
</File>
<File Title="fresh temp files only (max. 5, max. 10 minutes old)" Path="%TEMP%" Filter="Newest" MaxFiles="5" MaxSeconds="600" >
<Script Title="Download zipped file" Name="BuiltIns/DownloadZipped.cs" Icon="Icons/Zipped.png"/>
</File>
<Folder Id="Docs folder" Path="%USERPROFILE%\Documents">
<Tool Title="Open in Explorer" Name="WinExplorer"/>
</Folder>
<!-- ==== Collecting one test run's worth of logs ==========================================
The same node is declared on every machine under the same Id, so one <FileRef Id="applog"
MachineId="*"/> in a package collects the lot. See docs/MarkAndClear.md.
Clearable="1" is the permission to empty this file, or to draw a line under it when it
cannot be emptied. It is OFF by default, on purpose: without it a Clear or a Mark passes
the node over, which is what keeps a configuration file safe from a package that names it.
TailBytes caps what is collected from any one file at its last N bytes. A logger that
never rotates produces tens of gigabytes, which cannot be transferred at all, and the end
of it is what an investigation needs. -->
<Folder Id="applog" Title="Logs/Application logs" Path="%TEMP%\DirigentDemoLogs"
Mask="**/*.log" MaxSeconds="604800" MaxTotalBytes="52428800"
Clearable="1" TailBytes="1048576">
<Tool Title="Open in Explorer" Name="WinExplorer"/>
</Folder>
<!-- Tools are added to machine's Tools menu. Tools are always started on local machine.
Tools are defined in LocalConfig.xml file. -->
<Tool Title="VNC to m1" Name="VncViewer" Args="%MACHINE_IP%"/>
<!-- Scripts are added to machine's Tools menu too. Scripts might run on any machine.
Scripts are wither BuiltIn or loaded from file. -->
<Script Title="Notepad++" Name="Scripts/DemoScript1.cs" Args="φιλοξενία"/>
<!-- Network services available on the machine.
In case of connecting via SSH dirigent sets up the port forwarding for these. -->
<Service Name="VNC" Port="5900"/>
</Machine>
<Machine Name="m2" IP="127.0.0.1" MAC="00-15-5D-00-0A-01">
<Share Name="C" Path="C:\"/>
<!-- the same Id as on m1, so one wildcard reference collects both machines.
A <Share> covering these paths is what lets the other machines fetch them - and the
machine the download goes to needs one covering its own download folder. -->
<Folder Id="applog" Title="Logs/Application logs" Path="%TEMP%\DirigentDemoLogs"
Mask="**/*.log" MaxSeconds="604800" MaxTotalBytes="52428800"
Clearable="1" TailBytes="1048576"/>
</Machine>
<App
AppIdTuple = "m1.appWithFile"
Template = "apps.notepad"
ExeFullPath = "%SystemRoot%\notepad.exe"
StartupDir = "%USERPROFILE%\Documents"
CmdLineArgs = "xxx.txt"
>
<File Id="xxx" Title="user's doc" Path="..\xxx.txt" Icon="Icons/LogFile.png">
<Tool Title="Open in Notepad" Name="Notepad++"/>
</File>
<File Id="yyy" Title="newest log" Path="C:\Logs" Mask="*.log" Filter="Newest" >
<Tool Title="Open in Notepad" Name="Notepad++" />
</File>
<File Title="apps startup folder doc" Path="%APP_STARTUPDIR%\config1.txt">
<Tool Title="Open in Notepad" Name="Notepad++"/>
</File>
<File Title="apps bin folder doc" Path="%APP_BINDIR%\DirectX.log">
<Tool Title="Open in Notepad" Name="Notepad++"/>
</File>
<Folder Id="LocalData folder" Path="%AppData%\Notepad++">
<Tool Title="Open in Explorer" Name="WinExplorer"/>
</Folder>
<!-- empty machine & app => matches any machine or app; if not used, will match the files from this app record only -->
<FileRef Id="pack_m1" MachineId="" AppId="" />
<Tool Title="Open some file in Notepad" Name="Notepad++" Args="somefile.txt"/>
<Script Title="Run some script" Name="Scripts/DemoScript1.cs" Args="somefile.txt" Icon="Icons\ScriptRed.png"/>
<Tool Title="VNC to where the app runs" Name="VncViewer" Args="%MACHINE_IP%"/>
<FilePackage Id="appFilePack">
<!-- reference to machine-specific file-->
<FileRef Id="Greetings" MachineId="m1" AppId="" />
<!-- reference to possibly multiple files -->
<FileRef Id="Greetings" MachineId="" AppId="" />
<!--Folder Title="Books folder" Path="%USERPROFILE%\Documents\Books">
<Tool Title="Open in Explorer" Name="WinExplorer"/>
</Folder-->
<!-- reference to file defined within another app -->
<FileRef Id="xxx" AppIdTuple="m1.a" />
<!-- direct definition of independent file using UNC path-->
<File Id="global2" Path="\\server\share\path\to\file.txt"/>
<!-- global files specification -->
<File Id="inPackFile" AppIdTuple="m1.a" Path="D:\TEMP\file.txt">
<Tool Title="Notepad++" Name="Notepad++"/>
</File>
<Tool Title="Browse files in package" Name="FileCmd" Args="%FILEPACKAGE_LIST_FILE%"/>
<Script Title="Browse with DoubleCmd" Name="Builtins/BrowseInDblCmdVirtPanel.cs" />
</FilePackage>
<Folder Title="TEMP folder" Path="D:\TEMP">
<Tool Title="Open in Explorer" Name="WinExplorer" Args="%FILE_PATH%"/>
</Folder>
</App>
<!-- FilePackage is a collection of file and folders available for some operation (browse, download...) -->
<!-- Note: FilePackage and VFolder can include the same stuff -->
<FilePackage Id="pack1">
<!-- reference to machine-specific file-->
<FileRef MachineId="m1" AppId="Greetings"/>
<!-- reference to application-specific file-->
<FileRef Id="xxx" MachineId="m1" AppId="appWithFile"/>
<!-- reference to file package-->
<FileRef Id="xxx" MachineId="m1" AppId="appWithFile"/>
<!-- direct definition of independent file using UNC path-->
<File Id="global2" Path="\\server\share\path\to\file.txt"/>
<Tool Title="Browse files in package" Name="FileCmd" CmdLineArgs="%PACKAGE_LIST_FILE%"/>
<!-- real folder in the filesystem using glob-style globbing; empty mask means "**"-->
<Folder Id="fold1" Path="D:\TEMP" Mask="**/logs/**/*.{log,txt}" />
<!-- limits keeping a growing log folder from producing an unbounded download -->
<Folder Id="fold1recent" Title="recent logs only" Path="D:\TEMP" Mask="**/*.{log,txt}"
MaxSeconds="172800" MaxFiles="200" MaxTotalBytes="52428800" />
<!-- virtual folder is just like a sub-package containing real files, real folders, or virtual subfolders -->
<VFolder Id="vfold1">
<File Id="global3" Path="\\server\share\path\to\file.txt"/>
<FileRef AppIdTuple = "m1.appWithFile" Id="xxx"/>
<Folder Id="fold2" Path="D:\TEMP" />
<VFolder Id="vsubfold2">
<!-- NOT IMPLEMENTED YET (silently ignored): would resolve to the tree of files/filerefs/folders/vfolders provided by given script -->
<ScriptedContent Script="PackageScripts/Test1" Args=""/>
<File Id="inPackFile" Path="\\server\TEMP\file.txt"/>
</VFolder>
</VFolder>
</FilePackage>
<!-- global files specification -->
<File Id="global4" Path="\\server\share\path\to\file.txt">
<!-- Tools appear in the file's context menu -->
<Tool Title="Notepad++" Name="Notepad++" />
</File>
<File Id="local1" MachineId="m1" Path="D:\TEMP\file.txt">
<!-- Tools appear in the file's context menu -->
<Tool Title="Notepad++" Name="Notepad++" />
</File>
<!-- This is a default item which does not need to be defined explicitly unless you need some special tools for it;
the path is provided automatically -->
<File Title="SharedConfig" Id="DirigentSharedConfig" MachineId="m1" Path="x:\y\SharedConfig.xml">
<Tool Title="Notepad++" Name="Notepad++" Icon="Icons\Notepad++.png" Args="%FILE_PATH%"/>
</File>
<Folder Title="TEMP folder" MachineId="m1" Path="D:\TEMP">
<Tool Title="Open in Explorer" Name="WinExplorer" Args="%FILE_PATH%"/>
</Folder>
<!-- what to do during the KillAll operation on top of killing all running apps & plans -->
<KillAll>
<!-- HostId is mandatory. The tool needs to be defined in LocalConfig.xml on that host. -->
<Tool HostId="m1" Name="BatchScript" Args="start /min kill-all-action-1.bat"/>
</KillAll>
</Shared>