개정판 5c387707
service controller 경로 변경
Change-Id: I27880424bc7d34df698d104c852bc2a6909fcb8f
.gitignore | ||
---|---|---|
3 | 3 |
/KCOM/bin/x64/Debug/Bytescout.PDFExtractor.OCRExtension.dll |
4 | 4 |
*.dll |
5 | 5 |
*.cache |
6 |
*.config |
|
7 | 6 |
*.suo |
8 | 7 |
*.ide |
9 | 8 |
/KCOM/bin |
ConvertService/ServiceBase/ServiceController.sln | ||
---|---|---|
1 |
|
|
2 |
Microsoft Visual Studio Solution File, Format Version 12.00 |
|
3 |
# Visual Studio 15 |
|
4 |
VisualStudioVersion = 15.0.28307.572 |
|
5 |
MinimumVisualStudioVersion = 10.0.40219.1 |
|
6 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.Service.StationController", "Markus.Service.StationController\Markus.Service.StationController.csproj", "{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}" |
|
7 |
ProjectSection(ProjectDependencies) = postProject |
|
8 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F} = {B06C0A20-BC30-4A3E-8D74-E0E2FF55510F} |
|
9 |
EndProjectSection |
|
10 |
EndProject |
|
11 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.Service.Extensions", "Markus.Service.Extensions\Markus.Service.Extensions.csproj", "{5F983789-3E8F-4F9A-A601-138C3A83CA5F}" |
|
12 |
EndProject |
|
13 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.Mvvm.ToolKit", "Markus.Mvvm.ToolKit\Markus.Mvvm.ToolKit.csproj", "{9EFE95D6-9985-422A-A76F-285C8CF73617}" |
|
14 |
EndProject |
|
15 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.Service.WcfClient", "Markus.Service.WcfClient\Markus.Service.WcfClient.csproj", "{691078D3-BE0E-4697-BAB6-ED3ACA842D19}" |
|
16 |
ProjectSection(ProjectDependencies) = postProject |
|
17 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F} = {B06C0A20-BC30-4A3E-8D74-E0E2FF55510F} |
|
18 |
EndProjectSection |
|
19 |
EndProject |
|
20 |
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "StationControllerSQL", "StationControllerSQL\StationControllerSQL.sqlproj", "{58C58DDF-311D-4108-A12B-1090C39E718B}" |
|
21 |
EndProject |
|
22 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StationControllerService", "StationControllerService\StationControllerService.csproj", "{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}" |
|
23 |
EndProject |
|
24 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.ConvertProcessTest", "Markus.ConvertProcessTest\Markus.ConvertProcessTest.csproj", "{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}" |
|
25 |
EndProject |
|
26 |
Global |
|
27 |
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|
28 |
AppVeyor|Any CPU = AppVeyor|Any CPU |
|
29 |
AppVeyor|x64 = AppVeyor|x64 |
|
30 |
AppVeyor|x86 = AppVeyor|x86 |
|
31 |
Debug|Any CPU = Debug|Any CPU |
|
32 |
Debug|x64 = Debug|x64 |
|
33 |
Debug|x86 = Debug|x86 |
|
34 |
Release|Any CPU = Release|Any CPU |
|
35 |
Release|x64 = Release|x64 |
|
36 |
Release|x86 = Release|x86 |
|
37 |
EndGlobalSection |
|
38 |
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|
39 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
40 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
41 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|x64.ActiveCfg = Release|Any CPU |
|
42 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|x64.Build.0 = Release|Any CPU |
|
43 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
44 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
45 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
46 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
47 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
48 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|x64.Build.0 = Debug|Any CPU |
|
49 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
50 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Debug|x86.Build.0 = Debug|Any CPU |
|
51 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
52 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
53 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|x64.ActiveCfg = Release|Any CPU |
|
54 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|x64.Build.0 = Release|Any CPU |
|
55 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|x86.ActiveCfg = Release|Any CPU |
|
56 |
{9D993D6E-3A7B-470E-B5AD-D2CF89633F1C}.Release|x86.Build.0 = Release|Any CPU |
|
57 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
58 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
59 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|x64.ActiveCfg = Release|x64 |
|
60 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|x64.Build.0 = Release|x64 |
|
61 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
62 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
63 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
64 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
65 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|x64.ActiveCfg = Debug|x64 |
|
66 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|x64.Build.0 = Debug|x64 |
|
67 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
68 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Debug|x86.Build.0 = Debug|Any CPU |
|
69 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
70 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|Any CPU.Build.0 = Release|Any CPU |
|
71 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|x64.ActiveCfg = Release|x64 |
|
72 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|x64.Build.0 = Release|x64 |
|
73 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|x86.ActiveCfg = Release|Any CPU |
|
74 |
{5F983789-3E8F-4F9A-A601-138C3A83CA5F}.Release|x86.Build.0 = Release|Any CPU |
|
75 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
76 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
77 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|x64.ActiveCfg = Release|Any CPU |
|
78 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|x64.Build.0 = Release|Any CPU |
|
79 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
80 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
81 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
82 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
83 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
84 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|x64.Build.0 = Debug|Any CPU |
|
85 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
86 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Debug|x86.Build.0 = Debug|Any CPU |
|
87 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
88 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|Any CPU.Build.0 = Release|Any CPU |
|
89 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x64.ActiveCfg = Release|Any CPU |
|
90 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x64.Build.0 = Release|Any CPU |
|
91 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x86.ActiveCfg = Release|Any CPU |
|
92 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x86.Build.0 = Release|Any CPU |
|
93 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
94 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
95 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|x64.ActiveCfg = Release|Any CPU |
|
96 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|x64.Build.0 = Release|Any CPU |
|
97 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
98 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
99 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
100 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
101 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
102 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.Build.0 = Debug|Any CPU |
|
103 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
104 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x86.Build.0 = Debug|Any CPU |
|
105 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
106 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|Any CPU.Build.0 = Release|Any CPU |
|
107 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|x64.ActiveCfg = Release|Any CPU |
|
108 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|x64.Build.0 = Release|Any CPU |
|
109 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|x86.ActiveCfg = Release|Any CPU |
|
110 |
{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|x86.Build.0 = Release|Any CPU |
|
111 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|Any CPU.ActiveCfg = Debug|Any CPU |
|
112 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|Any CPU.Build.0 = Debug|Any CPU |
|
113 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|Any CPU.Deploy.0 = Debug|Any CPU |
|
114 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x64.ActiveCfg = Debug|Any CPU |
|
115 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x64.Build.0 = Debug|Any CPU |
|
116 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x64.Deploy.0 = Debug|Any CPU |
|
117 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x86.ActiveCfg = Debug|Any CPU |
|
118 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x86.Build.0 = Debug|Any CPU |
|
119 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.AppVeyor|x86.Deploy.0 = Debug|Any CPU |
|
120 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
121 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
122 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU |
|
123 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
124 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x64.Build.0 = Debug|Any CPU |
|
125 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x64.Deploy.0 = Debug|Any CPU |
|
126 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
127 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x86.Build.0 = Debug|Any CPU |
|
128 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Debug|x86.Deploy.0 = Debug|Any CPU |
|
129 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
130 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|Any CPU.Build.0 = Release|Any CPU |
|
131 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|Any CPU.Deploy.0 = Release|Any CPU |
|
132 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x64.ActiveCfg = Release|Any CPU |
|
133 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x64.Build.0 = Release|Any CPU |
|
134 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x64.Deploy.0 = Release|Any CPU |
|
135 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x86.ActiveCfg = Release|Any CPU |
|
136 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x86.Build.0 = Release|Any CPU |
|
137 |
{58C58DDF-311D-4108-A12B-1090C39E718B}.Release|x86.Deploy.0 = Release|Any CPU |
|
138 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
139 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
140 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|x64.ActiveCfg = Release|Any CPU |
|
141 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|x64.Build.0 = Release|Any CPU |
|
142 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
143 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
144 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
145 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
146 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
147 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|x64.Build.0 = Debug|Any CPU |
|
148 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
149 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Debug|x86.Build.0 = Debug|Any CPU |
|
150 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
151 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|Any CPU.Build.0 = Release|Any CPU |
|
152 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|x64.ActiveCfg = Release|Any CPU |
|
153 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|x64.Build.0 = Release|Any CPU |
|
154 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|x86.ActiveCfg = Release|Any CPU |
|
155 |
{B06C0A20-BC30-4A3E-8D74-E0E2FF55510F}.Release|x86.Build.0 = Release|Any CPU |
|
156 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU |
|
157 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|Any CPU.Build.0 = Release|Any CPU |
|
158 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|x64.ActiveCfg = Release|Any CPU |
|
159 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|x64.Build.0 = Release|Any CPU |
|
160 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|x86.ActiveCfg = Release|Any CPU |
|
161 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.AppVeyor|x86.Build.0 = Release|Any CPU |
|
162 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
163 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
164 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
165 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|x64.Build.0 = Debug|Any CPU |
|
166 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
167 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Debug|x86.Build.0 = Debug|Any CPU |
|
168 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
169 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|Any CPU.Build.0 = Release|Any CPU |
|
170 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|x64.ActiveCfg = Release|Any CPU |
|
171 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|x64.Build.0 = Release|Any CPU |
|
172 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|x86.ActiveCfg = Release|Any CPU |
|
173 |
{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}.Release|x86.Build.0 = Release|Any CPU |
|
174 |
EndGlobalSection |
|
175 |
GlobalSection(SolutionProperties) = preSolution |
|
176 |
HideSolutionNode = FALSE |
|
177 |
EndGlobalSection |
|
178 |
GlobalSection(ExtensibilityGlobals) = postSolution |
|
179 |
SolutionGuid = {CA1BB1E8-1969-4435-A889-37F359B6EAAE} |
|
180 |
EndGlobalSection |
|
181 |
GlobalSection(Performance) = preSolution |
|
182 |
HasPerformanceSessions = true |
|
183 |
EndGlobalSection |
|
184 |
GlobalSection(Performance) = preSolution |
|
185 |
HasPerformanceSessions = true |
|
186 |
EndGlobalSection |
|
187 |
EndGlobal |
ConvertService/ServiceController/Markus.ConvertProcessTest/App.config | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8" ?> |
|
2 |
<configuration> |
|
3 |
<startup> |
|
4 |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /> |
|
5 |
</startup> |
|
6 |
</configuration> |
ConvertService/ServiceController/Markus.ConvertProcessTest/Markus.ConvertProcessTest.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
4 |
<PropertyGroup> |
|
5 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
6 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
7 |
<ProjectGuid>{9D5B0CA0-329D-40AF-BA0D-B727080C19EB}</ProjectGuid> |
|
8 |
<OutputType>Exe</OutputType> |
|
9 |
<RootNamespace>Markus.Service.ConvertProcess</RootNamespace> |
|
10 |
<AssemblyName>Markus.Service.ConvertProcess</AssemblyName> |
|
11 |
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> |
|
12 |
<FileAlignment>512</FileAlignment> |
|
13 |
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
|
14 |
<Deterministic>true</Deterministic> |
|
15 |
</PropertyGroup> |
|
16 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
17 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
18 |
<DebugSymbols>true</DebugSymbols> |
|
19 |
<DebugType>full</DebugType> |
|
20 |
<Optimize>false</Optimize> |
|
21 |
<OutputPath>bin\Debug\</OutputPath> |
|
22 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
23 |
<ErrorReport>prompt</ErrorReport> |
|
24 |
<WarningLevel>4</WarningLevel> |
|
25 |
</PropertyGroup> |
|
26 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
27 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
28 |
<DebugType>pdbonly</DebugType> |
|
29 |
<Optimize>true</Optimize> |
|
30 |
<OutputPath>bin\Release\</OutputPath> |
|
31 |
<DefineConstants>TRACE</DefineConstants> |
|
32 |
<ErrorReport>prompt</ErrorReport> |
|
33 |
<WarningLevel>4</WarningLevel> |
|
34 |
</PropertyGroup> |
|
35 |
<ItemGroup> |
|
36 |
<Reference Include="System" /> |
|
37 |
<Reference Include="System.Core" /> |
|
38 |
<Reference Include="System.Xml.Linq" /> |
|
39 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
40 |
<Reference Include="Microsoft.CSharp" /> |
|
41 |
<Reference Include="System.Data" /> |
|
42 |
<Reference Include="System.Net.Http" /> |
|
43 |
<Reference Include="System.Xml" /> |
|
44 |
</ItemGroup> |
|
45 |
<ItemGroup> |
|
46 |
<Compile Include="Program.cs" /> |
|
47 |
<Compile Include="Properties\AssemblyInfo.cs" /> |
|
48 |
</ItemGroup> |
|
49 |
<ItemGroup> |
|
50 |
<None Include="App.config"> |
|
51 |
<SubType>Designer</SubType> |
|
52 |
</None> |
|
53 |
</ItemGroup> |
|
54 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
55 |
</Project> |
ConvertService/ServiceController/Markus.ConvertProcessTest/Program.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
|
|
7 |
namespace Markus.ConvertProcessTest |
|
8 |
{ |
|
9 |
class Program |
|
10 |
{ |
|
11 |
static void Main(string[] args) |
|
12 |
{ |
|
13 |
while (true) |
|
14 |
{ |
|
15 |
System.Threading.Thread.Sleep(10000); |
|
16 |
} |
|
17 |
} |
|
18 |
} |
|
19 |
} |
ConvertService/ServiceController/Markus.ConvertProcessTest/Properties/AssemblyInfo.cs | ||
---|---|---|
1 |
using System.Reflection; |
|
2 |
using System.Runtime.CompilerServices; |
|
3 |
using System.Runtime.InteropServices; |
|
4 |
|
|
5 |
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 |
|
6 |
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 |
|
7 |
// 이러한 특성 값을 변경하세요. |
|
8 |
[assembly: AssemblyTitle("Markus.ConvertProcessTest")] |
|
9 |
[assembly: AssemblyDescription("")] |
|
10 |
[assembly: AssemblyConfiguration("")] |
|
11 |
[assembly: AssemblyCompany("")] |
|
12 |
[assembly: AssemblyProduct("Markus.ConvertProcessTest")] |
|
13 |
[assembly: AssemblyCopyright("Copyright © 2020")] |
|
14 |
[assembly: AssemblyTrademark("")] |
|
15 |
[assembly: AssemblyCulture("")] |
|
16 |
|
|
17 |
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 |
|
18 |
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 |
|
19 |
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. |
|
20 |
[assembly: ComVisible(false)] |
|
21 |
|
|
22 |
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. |
|
23 |
[assembly: Guid("9d5b0ca0-329d-40af-ba0d-b727080c19eb")] |
|
24 |
|
|
25 |
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. |
|
26 |
// |
|
27 |
// 주 버전 |
|
28 |
// 부 버전 |
|
29 |
// 빌드 번호 |
|
30 |
// 수정 버전 |
|
31 |
// |
|
32 |
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로 |
|
33 |
// 지정되도록 할 수 있습니다. |
|
34 |
// [assembly: AssemblyVersion("1.0.*")] |
|
35 |
[assembly: AssemblyVersion("1.0.0.0")] |
|
36 |
[assembly: AssemblyFileVersion("1.0.0.0")] |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/AsyncCommand/AsyncCommand.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Threading.Tasks; |
|
3 |
using System.Windows.Input; |
|
4 |
|
|
5 |
namespace Markus.Mvvm.ToolKit |
|
6 |
{ |
|
7 |
public class AsyncCommand : IAsyncCommand |
|
8 |
{ |
|
9 |
public event EventHandler CanExecuteChanged; |
|
10 |
|
|
11 |
private bool _isExecuting; |
|
12 |
private readonly Func<Task> _execute; |
|
13 |
private readonly Func<bool> _canExecute; |
|
14 |
private readonly IErrorHandler _errorHandler; |
|
15 |
|
|
16 |
public AsyncCommand( |
|
17 |
Func<Task> execute, |
|
18 |
Func<bool> canExecute = null, |
|
19 |
IErrorHandler errorHandler = null) |
|
20 |
{ |
|
21 |
_execute = execute; |
|
22 |
_canExecute = canExecute; |
|
23 |
_errorHandler = errorHandler; |
|
24 |
} |
|
25 |
|
|
26 |
public bool CanExecute() |
|
27 |
{ |
|
28 |
return !_isExecuting && (_canExecute?.Invoke() ?? true); |
|
29 |
} |
|
30 |
|
|
31 |
public async Task ExecuteAsync() |
|
32 |
{ |
|
33 |
if (CanExecute()) |
|
34 |
{ |
|
35 |
try |
|
36 |
{ |
|
37 |
_isExecuting = true; |
|
38 |
await _execute(); |
|
39 |
} |
|
40 |
finally |
|
41 |
{ |
|
42 |
_isExecuting = false; |
|
43 |
} |
|
44 |
} |
|
45 |
|
|
46 |
RaiseCanExecuteChanged(); |
|
47 |
} |
|
48 |
|
|
49 |
public void RaiseCanExecuteChanged() |
|
50 |
{ |
|
51 |
CanExecuteChanged?.Invoke(this, EventArgs.Empty); |
|
52 |
} |
|
53 |
|
|
54 |
#region Explicit implementations |
|
55 |
bool ICommand.CanExecute(object parameter) |
|
56 |
{ |
|
57 |
return CanExecute(); |
|
58 |
} |
|
59 |
|
|
60 |
void ICommand.Execute(object parameter) |
|
61 |
{ |
|
62 |
ExecuteAsync().FireAndForgetSafeAsync(_errorHandler); |
|
63 |
} |
|
64 |
#endregion |
|
65 |
} |
|
66 |
|
|
67 |
public class AsyncCommand<T> : IAsyncCommand<T> |
|
68 |
{ |
|
69 |
public event EventHandler CanExecuteChanged; |
|
70 |
|
|
71 |
private bool _isExecuting; |
|
72 |
private readonly Func<T, Task> _execute; |
|
73 |
private readonly Func<T, bool> _canExecute; |
|
74 |
private readonly IErrorHandler _errorHandler; |
|
75 |
|
|
76 |
public AsyncCommand(Func<T, Task> execute, Func<T, bool> canExecute = null, IErrorHandler errorHandler = null) |
|
77 |
{ |
|
78 |
_execute = execute; |
|
79 |
_canExecute = canExecute; |
|
80 |
_errorHandler = errorHandler; |
|
81 |
} |
|
82 |
|
|
83 |
public bool CanExecute(T parameter) |
|
84 |
{ |
|
85 |
return !_isExecuting && (_canExecute?.Invoke(parameter) ?? true); |
|
86 |
} |
|
87 |
|
|
88 |
public async Task ExecuteAsync(T parameter) |
|
89 |
{ |
|
90 |
if (CanExecute(parameter)) |
|
91 |
{ |
|
92 |
try |
|
93 |
{ |
|
94 |
_isExecuting = true; |
|
95 |
await _execute(parameter); |
|
96 |
} |
|
97 |
finally |
|
98 |
{ |
|
99 |
_isExecuting = false; |
|
100 |
} |
|
101 |
} |
|
102 |
|
|
103 |
RaiseCanExecuteChanged(); |
|
104 |
} |
|
105 |
|
|
106 |
public void RaiseCanExecuteChanged() |
|
107 |
{ |
|
108 |
CanExecuteChanged?.Invoke(this, EventArgs.Empty); |
|
109 |
} |
|
110 |
|
|
111 |
#region Explicit implementations |
|
112 |
bool ICommand.CanExecute(object parameter) |
|
113 |
{ |
|
114 |
return CanExecute((T)parameter); |
|
115 |
} |
|
116 |
|
|
117 |
void ICommand.Execute(object parameter) |
|
118 |
{ |
|
119 |
ExecuteAsync((T)parameter).FireAndForgetSafeAsync(_errorHandler); |
|
120 |
} |
|
121 |
#endregion |
|
122 |
} |
|
123 |
|
|
124 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/AsyncCommand/IAsyncCommand.cs | ||
---|---|---|
1 |
using System.Threading.Tasks; |
|
2 |
using System.Windows.Input; |
|
3 |
|
|
4 |
namespace Markus.Mvvm.ToolKit |
|
5 |
{ |
|
6 |
public interface IAsyncCommand : ICommand |
|
7 |
{ |
|
8 |
Task ExecuteAsync(); |
|
9 |
bool CanExecute(); |
|
10 |
} |
|
11 |
|
|
12 |
public interface IAsyncCommand<T> : ICommand |
|
13 |
{ |
|
14 |
Task ExecuteAsync(T parameter); |
|
15 |
bool CanExecute(T parameter); |
|
16 |
} |
|
17 |
|
|
18 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/AsyncCommand/IErrorHandler.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Markus.Mvvm.ToolKit |
|
4 |
{ |
|
5 |
public interface IErrorHandler |
|
6 |
{ |
|
7 |
void HandleError(Exception ex); |
|
8 |
} |
|
9 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/Markus.Mvvm.ToolKit.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
4 |
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^net\d'))"> |
|
5 |
<DefineConstants>NETFRAMEWORK</DefineConstants> |
|
6 |
</PropertyGroup> |
|
7 |
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^netstandard\d'))"> |
|
8 |
<DefineConstants>NETSTANDARD</DefineConstants> |
|
9 |
</PropertyGroup> |
|
10 |
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^netcoreapp\d'))"> |
|
11 |
<DefineConstants>NETCORE</DefineConstants> |
|
12 |
</PropertyGroup> |
|
13 |
<PropertyGroup> |
|
14 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
15 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
16 |
<ProjectGuid>{9EFE95D6-9985-422A-A76F-285C8CF73617}</ProjectGuid> |
|
17 |
<OutputType>Library</OutputType> |
|
18 |
<AppDesignerFolder>Properties</AppDesignerFolder> |
|
19 |
<RootNamespace>Markus.Mvvm.ToolKit</RootNamespace> |
|
20 |
<AssemblyName>Markus.Mvvm.ToolKit</AssemblyName> |
|
21 |
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |
|
22 |
<FileAlignment>512</FileAlignment> |
|
23 |
<Deterministic>true</Deterministic> |
|
24 |
</PropertyGroup> |
|
25 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
26 |
<DebugSymbols>true</DebugSymbols> |
|
27 |
<DebugType>full</DebugType> |
|
28 |
<Optimize>false</Optimize> |
|
29 |
<OutputPath>bin\Debug\</OutputPath> |
|
30 |
<DefineConstants>TRACE;DEBUG</DefineConstants> |
|
31 |
<ErrorReport>prompt</ErrorReport> |
|
32 |
<WarningLevel>4</WarningLevel> |
|
33 |
<PlatformTarget>x64</PlatformTarget> |
|
34 |
</PropertyGroup> |
|
35 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
36 |
<DebugType>pdbonly</DebugType> |
|
37 |
<Optimize>true</Optimize> |
|
38 |
<OutputPath>bin\Release\</OutputPath> |
|
39 |
<DefineConstants>TRACE</DefineConstants> |
|
40 |
<ErrorReport>prompt</ErrorReport> |
|
41 |
<WarningLevel>4</WarningLevel> |
|
42 |
</PropertyGroup> |
|
43 |
<ItemGroup> |
|
44 |
<Reference Include="PresentationCore" /> |
|
45 |
<Reference Include="PresentationFramework" /> |
|
46 |
<Reference Include="System" /> |
|
47 |
<Reference Include="System.Core" /> |
|
48 |
<Reference Include="System.Xaml" /> |
|
49 |
<Reference Include="System.Xml.Linq" /> |
|
50 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
51 |
<Reference Include="Microsoft.CSharp" /> |
|
52 |
<Reference Include="System.Data" /> |
|
53 |
<Reference Include="System.Net.Http" /> |
|
54 |
<Reference Include="System.Xml" /> |
|
55 |
<Reference Include="WindowsBase" /> |
|
56 |
</ItemGroup> |
|
57 |
<ItemGroup> |
|
58 |
<Compile Include="AsyncCommand\AsyncCommand.cs" /> |
|
59 |
<Compile Include="RelayCommand\EventRaiser.cs" /> |
|
60 |
<Compile Include="RelayCommand\RelayCommand.cs" /> |
|
61 |
<Compile Include="AsyncCommand\IAsyncCommand.cs" /> |
|
62 |
<Compile Include="AsyncCommand\IErrorHandler.cs" /> |
|
63 |
<Compile Include="Notification.cs" /> |
|
64 |
<Compile Include="Properties\AssemblyInfo.cs" /> |
|
65 |
<Compile Include="TaskUtilities.cs" /> |
|
66 |
<Compile Include="ViewModelBase.cs" /> |
|
67 |
</ItemGroup> |
|
68 |
<ItemGroup> |
|
69 |
<Page Include="Themes\Generic.xaml"> |
|
70 |
<Generator>MSBuild:Compile</Generator> |
|
71 |
<SubType>Designer</SubType> |
|
72 |
</Page> |
|
73 |
</ItemGroup> |
|
74 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
75 |
</Project> |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/Notification.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.ComponentModel; |
|
3 |
using System.Linq.Expressions; |
|
4 |
|
|
5 |
namespace Markus.Mvvm.ToolKit |
|
6 |
{ |
|
7 |
public class NotifyExpectation : INotifyPropertyChanged |
|
8 |
{ |
|
9 |
public event PropertyChangedEventHandler PropertyChanged; |
|
10 |
protected virtual void OnPropertyChanged(Expression<Func<object>> propertyExpression) |
|
11 |
{ |
|
12 |
PropertyChangedEventHandler handler = PropertyChanged; |
|
13 |
if (handler != null) handler(this, new PropertyChangedEventArgs(GetPropertyName(propertyExpression))); |
|
14 |
} |
|
15 |
|
|
16 |
private string GetPropertyName(Expression<Func<object>> propertyExpression) |
|
17 |
{ |
|
18 |
var unaryExpression = propertyExpression.Body as UnaryExpression; |
|
19 |
var memberExpression = unaryExpression == null ? (MemberExpression)propertyExpression.Body : (MemberExpression)unaryExpression.Operand; |
|
20 |
var propertyName = memberExpression.Member.Name; |
|
21 |
return propertyName; |
|
22 |
} |
|
23 |
} |
|
24 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/Properties/AssemblyInfo.cs | ||
---|---|---|
1 |
using System.Reflection; |
|
2 |
using System.Runtime.CompilerServices; |
|
3 |
using System.Runtime.InteropServices; |
|
4 |
using System.Windows; |
|
5 |
|
|
6 |
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 |
|
7 |
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 |
|
8 |
// 이러한 특성 값을 변경하세요. |
|
9 |
[assembly: AssemblyTitle("Markus.Mvvm.ToolKit")] |
|
10 |
[assembly: AssemblyDescription("")] |
|
11 |
[assembly: AssemblyConfiguration("")] |
|
12 |
[assembly: AssemblyCompany("")] |
|
13 |
[assembly: AssemblyProduct("Markus.Mvvm.ToolKit")] |
|
14 |
[assembly: AssemblyCopyright("Copyright © 2019")] |
|
15 |
[assembly: AssemblyTrademark("")] |
|
16 |
[assembly: AssemblyCulture("")] |
|
17 |
|
|
18 |
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 |
|
19 |
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 |
|
20 |
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. |
|
21 |
[assembly: ComVisible(false)] |
|
22 |
|
|
23 |
[assembly: ThemeInfo( |
|
24 |
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located |
|
25 |
//(used if a resource is not found in the page, |
|
26 |
// or application resource dictionaries) |
|
27 |
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located |
|
28 |
//(used if a resource is not found in the page, |
|
29 |
// app, or any theme specific resource dictionaries) |
|
30 |
)] |
|
31 |
|
|
32 |
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. |
|
33 |
[assembly: Guid("9efe95d6-9985-422a-a76f-285c8cf73617")] |
|
34 |
|
|
35 |
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. |
|
36 |
// |
|
37 |
// 주 버전 |
|
38 |
// 부 버전 |
|
39 |
// 빌드 번호 |
|
40 |
// 수정 버전 |
|
41 |
// |
|
42 |
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 |
|
43 |
// 기본값으로 할 수 있습니다. |
|
44 |
// [assembly: AssemblyVersion("1.0.*")] |
|
45 |
[assembly: AssemblyVersion("1.0.0.0")] |
|
46 |
[assembly: AssemblyFileVersion("1.0.0.0")] |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/RelayCommand/EventRaiser.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
|
|
7 |
namespace Markus.Mvvm.ToolKit |
|
8 |
{ |
|
9 |
public static class EventRaiser |
|
10 |
{ |
|
11 |
public static void Raise(this EventHandler handler, object sender) |
|
12 |
{ |
|
13 |
handler?.Invoke(sender, EventArgs.Empty); |
|
14 |
} |
|
15 |
|
|
16 |
public static void Raise<T>(this EventHandler<EventArgs<T>> handler, object sender, T value) |
|
17 |
{ |
|
18 |
handler?.Invoke(sender, new EventArgs<T>(value)); |
|
19 |
} |
|
20 |
|
|
21 |
public static void Raise<T>(this EventHandler<T> handler, object sender, T value) where T : EventArgs |
|
22 |
{ |
|
23 |
handler?.Invoke(sender, value); |
|
24 |
} |
|
25 |
|
|
26 |
public static void Raise<T>(this EventHandler<EventArgs<T>> handler, object sender, EventArgs<T> value) |
|
27 |
{ |
|
28 |
handler?.Invoke(sender, value); |
|
29 |
} |
|
30 |
} |
|
31 |
|
|
32 |
public class EventArgs<T> : EventArgs |
|
33 |
{ |
|
34 |
public EventArgs(T value) |
|
35 |
{ |
|
36 |
Value = value; |
|
37 |
} |
|
38 |
|
|
39 |
public T Value { get; private set; } |
|
40 |
} |
|
41 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/RelayCommand/RelayCommand.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Diagnostics.CodeAnalysis; |
|
4 |
using System.Linq; |
|
5 |
using System.Text; |
|
6 |
using System.Threading.Tasks; |
|
7 |
using System.Windows.Input; |
|
8 |
|
|
9 |
namespace Markus.Mvvm.ToolKit |
|
10 |
{ |
|
11 |
public class RelayCommand<T> : ICommand |
|
12 |
{ |
|
13 |
private readonly Predicate<T> _canExecute; |
|
14 |
private readonly Action<T> _execute; |
|
15 |
|
|
16 |
public RelayCommand(Action<T> execute) |
|
17 |
: this(execute, null) |
|
18 |
{ |
|
19 |
_execute = execute; |
|
20 |
} |
|
21 |
|
|
22 |
public RelayCommand(Action<T> execute, Predicate<T> canExecute) |
|
23 |
{ |
|
24 |
if (execute == null) |
|
25 |
{ |
|
26 |
throw new ArgumentNullException("execute"); |
|
27 |
} |
|
28 |
_execute = execute; |
|
29 |
_canExecute = canExecute; |
|
30 |
} |
|
31 |
|
|
32 |
public bool CanExecute(object parameter) |
|
33 |
{ |
|
34 |
return _canExecute == null || _canExecute((T)parameter); |
|
35 |
} |
|
36 |
|
|
37 |
public void Execute(object parameter) |
|
38 |
{ |
|
39 |
_execute((T)parameter); |
|
40 |
} |
|
41 |
|
|
42 |
public event EventHandler CanExecuteChanged |
|
43 |
{ |
|
44 |
add { CommandManager.RequerySuggested += value; } |
|
45 |
remove { CommandManager.RequerySuggested -= value; } |
|
46 |
} |
|
47 |
} |
|
48 |
|
|
49 |
public class RelayCommand : ICommand |
|
50 |
{ |
|
51 |
private readonly Predicate<object> _canExecute; |
|
52 |
private readonly Action<object> _execute; |
|
53 |
|
|
54 |
public RelayCommand(Action<object> execute) |
|
55 |
: this(execute, null) |
|
56 |
{ |
|
57 |
_execute = execute; |
|
58 |
} |
|
59 |
|
|
60 |
public RelayCommand(Action<object> execute, Predicate<object> canExecute) |
|
61 |
{ |
|
62 |
if (execute == null) |
|
63 |
{ |
|
64 |
throw new ArgumentNullException("execute"); |
|
65 |
} |
|
66 |
_execute = execute; |
|
67 |
_canExecute = canExecute; |
|
68 |
} |
|
69 |
|
|
70 |
public bool CanExecute(object parameter) |
|
71 |
{ |
|
72 |
return _canExecute == null || _canExecute(parameter); |
|
73 |
} |
|
74 |
|
|
75 |
public void Execute(object parameter) |
|
76 |
{ |
|
77 |
_execute(parameter); |
|
78 |
} |
|
79 |
|
|
80 |
// Ensures WPF commanding infrastructure asks all RelayCommand objects whether their |
|
81 |
// associated views should be enabled whenever a command is invoked |
|
82 |
public event EventHandler CanExecuteChanged |
|
83 |
{ |
|
84 |
add |
|
85 |
{ |
|
86 |
CommandManager.RequerySuggested += value; |
|
87 |
CanExecuteChangedInternal += value; |
|
88 |
} |
|
89 |
remove |
|
90 |
{ |
|
91 |
CommandManager.RequerySuggested -= value; |
|
92 |
CanExecuteChangedInternal -= value; |
|
93 |
} |
|
94 |
} |
|
95 |
|
|
96 |
private event EventHandler CanExecuteChangedInternal; |
|
97 |
|
|
98 |
public void RaiseCanExecuteChanged() |
|
99 |
{ |
|
100 |
CanExecuteChangedInternal.Raise(this); |
|
101 |
} |
|
102 |
} |
|
103 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/TaskUtilities.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Threading.Tasks; |
|
3 |
|
|
4 |
namespace Markus.Mvvm.ToolKit |
|
5 |
{ |
|
6 |
public static class TaskUtilities |
|
7 |
{ |
|
8 |
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void |
|
9 |
public static async void FireAndForgetSafeAsync(this Task task, IErrorHandler handler = null) |
|
10 |
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void |
|
11 |
{ |
|
12 |
try |
|
13 |
{ |
|
14 |
await task; |
|
15 |
} |
|
16 |
catch (Exception ex) |
|
17 |
{ |
|
18 |
handler?.HandleError(ex); |
|
19 |
} |
|
20 |
} |
|
21 |
} |
|
22 |
} |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/Themes/Generic.xaml | ||
---|---|---|
1 |
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
2 |
xmlns:local="clr-namespace:Markus.Mvvm.ToolKit" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|
4 |
<!--<Style TargetType="local:PackIcon"> |
|
5 |
<Setter Property="Width" Value="20" /> |
|
6 |
<Setter Property="Height" Value="20" /> |
|
7 |
<Setter Property="Kind" Value="Abc"/> |
|
8 |
<Setter Property="IconBrush" Value="White"/> |
|
9 |
<Setter Property="Template"> |
|
10 |
<Setter.Value> |
|
11 |
<ControlTemplate> |
|
12 |
<Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> |
|
13 |
<Path x:Name="PART_PATH" Fill="{TemplateBinding IconBrush}" Stroke="{TemplateBinding IconBrush}"/> |
|
14 |
</Grid> |
|
15 |
</ControlTemplate> |
|
16 |
</Setter.Value> |
|
17 |
</Setter> |
|
18 |
</Style>--> |
|
19 |
</ResourceDictionary> |
ConvertService/ServiceController/Markus.Mvvm.ToolKit/ViewModelBase.cs | ||
---|---|---|
1 |
using System.ComponentModel; |
|
2 |
using System.Windows; |
|
3 |
using System.Windows.Input; |
|
4 |
|
|
5 |
namespace Markus.Mvvm.ToolKit |
|
6 |
{ |
|
7 |
public abstract class ViewModelBase : NotifyExpectation |
|
8 |
{ |
|
9 |
#region ViewModel Base Binding |
|
10 |
|
|
11 |
ViewModelBase viewModel; |
|
12 |
|
|
13 |
public ViewModelBase ViewModel |
|
14 |
{ |
|
15 |
get { return viewModel; } |
|
16 |
set { viewModel = value; } |
|
17 |
} |
|
18 |
|
|
19 |
public string Name |
|
20 |
{ |
|
21 |
get { return ViewModel?.Name; } |
|
22 |
set |
|
23 |
{ |
|
24 |
if (ViewModel?.Name != value) |
|
25 |
{ |
|
26 |
ViewModel.Name = value; |
|
27 |
OnPropertyChanged(()=>Name); |
|
28 |
} |
|
29 |
} |
|
30 |
} |
|
31 |
|
|
32 |
private bool isAcitve; |
|
33 |
|
|
34 |
public bool IsAcitve |
|
35 |
{ |
|
36 |
get { return isAcitve; } |
|
37 |
set |
|
38 |
{ |
|
39 |
if (isAcitve != value) |
|
40 |
{ |
|
41 |
isAcitve = value; |
|
42 |
OnPropertyChanged(() => isAcitve); |
|
43 |
} |
|
44 |
} |
|
45 |
} |
|
46 |
|
|
47 |
#endregion |
|
48 |
|
|
49 |
#region Command |
|
50 |
|
|
51 |
private ICommand _ClosingCommand; |
|
52 |
public ICommand ClosingCommand |
|
53 |
{ |
|
54 |
get => _ClosingCommand ?? (_ClosingCommand = new RelayCommand(param => this.Closed())); |
|
55 |
} |
|
56 |
|
|
57 |
private ICommand _LoadedCommand; |
|
58 |
public ICommand LoadedCommand |
|
59 |
{ |
|
60 |
get => _LoadedCommand ?? (_LoadedCommand = new RelayCommand(param => this.Loaded())); |
|
61 |
} |
|
62 |
|
|
63 |
#endregion Command |
|
64 |
|
|
65 |
public virtual void Closed() |
|
66 |
{ |
|
67 |
isAcitve = false; |
|
68 |
} |
|
69 |
|
|
70 |
public virtual void Loaded() |
|
71 |
{ |
|
72 |
isAcitve = true; |
|
73 |
} |
|
74 |
} |
|
75 |
} |
ConvertService/ServiceController/Markus.Service.Extensions/Exntensions/CollectionExtenstions.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Linq.Expressions; |
|
5 |
using System.Text; |
|
6 |
using System.Threading.Tasks; |
|
7 |
|
|
8 |
namespace Markus.Service.Extensions |
|
9 |
{ |
|
10 |
public static class CollectionExtensions |
|
11 |
{ |
|
12 |
//public static void Update<T>(this IList<T> source,IList<T> Target,IList<string> Keys) |
|
13 |
//{ |
|
14 |
// for (int i = source.Count; i == 0 ; --i) |
|
15 |
// { |
|
16 |
// var item = source[i]; |
|
17 |
// Target.Where(f=>) |
|
18 |
// item.GetType().GetProperty() |
|
19 |
// } |
|
20 |
//} |
|
21 |
|
|
22 |
/// <summary> |
|
23 |
/// Changes all elements of IEnumerable by the change function |
|
24 |
/// </summary> |
|
25 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
26 |
/// <param name="change">The way you want to change the stuff</param> |
|
27 |
/// <returns>An IEnumerable with all changes applied</returns> |
|
28 |
public static IEnumerable<T> Change<T>(this IEnumerable<T> enumerable, Func<T, T> change) |
|
29 |
{ |
|
30 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
31 |
ArgumentCheck.IsNullorWhiteSpace(change, "change"); |
|
32 |
|
|
33 |
foreach (var item in enumerable) |
|
34 |
{ |
|
35 |
yield return change(item); |
|
36 |
} |
|
37 |
} |
|
38 |
|
|
39 |
/// <summary> |
|
40 |
/// Changes all elements of IEnumerable by the change function, that fullfill the where function |
|
41 |
/// </summary> |
|
42 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
43 |
/// <param name="change">The way you want to change the stuff</param> |
|
44 |
/// <param name="where">The function to check where changes should be made</param> |
|
45 |
/// <returns> |
|
46 |
/// An IEnumerable with all changes applied |
|
47 |
/// </returns> |
|
48 |
public static IEnumerable<T> ChangeWhere<T>(this IEnumerable<T> enumerable, |
|
49 |
Func<T, T> change, |
|
50 |
Func<T, bool> @where) |
|
51 |
{ |
|
52 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
53 |
ArgumentCheck.IsNullorWhiteSpace(change, "change"); |
|
54 |
ArgumentCheck.IsNullorWhiteSpace(@where, "where"); |
|
55 |
|
|
56 |
foreach (var item in enumerable) |
|
57 |
{ |
|
58 |
if (@where(item)) |
|
59 |
{ |
|
60 |
yield return change(item); |
|
61 |
} |
|
62 |
else |
|
63 |
{ |
|
64 |
yield return item; |
|
65 |
} |
|
66 |
} |
|
67 |
} |
|
68 |
|
|
69 |
public static class ArgumentCheck |
|
70 |
{ |
|
71 |
|
|
72 |
|
|
73 |
/// <summary> |
|
74 |
/// Checks if a value is string or any other object if it is string |
|
75 |
/// it checks for nullorwhitespace otherwhise it checks for null only |
|
76 |
/// </summary> |
|
77 |
/// <typeparam name="T">Type of the item you want to check</typeparam> |
|
78 |
/// <param name="item">The item you want to check</param> |
|
79 |
/// <param name="nameOfTheArgument">Name of the argument</param> |
|
80 |
public static void IsNullorWhiteSpace<T>(T item, string nameOfTheArgument = "") |
|
81 |
{ |
|
82 |
|
|
83 |
Type type = typeof(T); |
|
84 |
if (type == typeof(string) || |
|
85 |
type == typeof(String)) |
|
86 |
{ |
|
87 |
if (string.IsNullOrWhiteSpace(item as string)) |
|
88 |
{ |
|
89 |
throw new ArgumentException(nameOfTheArgument + " is null or Whitespace"); |
|
90 |
} |
|
91 |
} |
|
92 |
else |
|
93 |
{ |
|
94 |
if (item == null) |
|
95 |
{ |
|
96 |
throw new ArgumentException(nameOfTheArgument + " is null"); |
|
97 |
} |
|
98 |
} |
|
99 |
|
|
100 |
} |
|
101 |
} |
|
102 |
|
|
103 |
/// <summary> |
|
104 |
/// Changes all elements of IEnumerable by the change function that do not fullfill the except function |
|
105 |
/// </summary> |
|
106 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
107 |
/// <param name="change">The way you want to change the stuff</param> |
|
108 |
/// <param name="where">The function to check where changes should not be made</param> |
|
109 |
/// <returns> |
|
110 |
/// An IEnumerable with all changes applied |
|
111 |
/// </returns> |
|
112 |
public static IEnumerable<T> ChangeExcept<T>(this IEnumerable<T> enumerable, |
|
113 |
Func<T, T> change, |
|
114 |
Func<T, bool> @where) |
|
115 |
{ |
|
116 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
117 |
ArgumentCheck.IsNullorWhiteSpace(change, "change"); |
|
118 |
ArgumentCheck.IsNullorWhiteSpace(@where, "where"); |
|
119 |
|
|
120 |
foreach (var item in enumerable) |
|
121 |
{ |
|
122 |
if (!@where(item)) |
|
123 |
{ |
|
124 |
yield return change(item); |
|
125 |
} |
|
126 |
else |
|
127 |
{ |
|
128 |
yield return item; |
|
129 |
} |
|
130 |
} |
|
131 |
} |
|
132 |
|
|
133 |
/// <summary> |
|
134 |
/// Update all elements of IEnumerable by the update function (only works with reference types) |
|
135 |
/// </summary> |
|
136 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
137 |
/// <param name="update">The way you want to change the stuff</param> |
|
138 |
/// <returns> |
|
139 |
/// The same enumerable you passed in |
|
140 |
/// </returns> |
|
141 |
public static IEnumerable<T> Update<T>(this IEnumerable<T> enumerable, |
|
142 |
Action<T> update) where T : class |
|
143 |
{ |
|
144 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
145 |
ArgumentCheck.IsNullorWhiteSpace(update, "update"); |
|
146 |
foreach (var item in enumerable) |
|
147 |
{ |
|
148 |
update(item); |
|
149 |
} |
|
150 |
return enumerable; |
|
151 |
} |
|
152 |
|
|
153 |
/// <summary> |
|
154 |
/// Update all elements of IEnumerable by the update function (only works with reference types) |
|
155 |
/// where the where function returns true |
|
156 |
/// </summary> |
|
157 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
158 |
/// <param name="update">The way you want to change the stuff</param> |
|
159 |
/// <param name="where">The function to check where updates should be made</param> |
|
160 |
/// <returns> |
|
161 |
/// The same enumerable you passed in |
|
162 |
/// </returns> |
|
163 |
public static IEnumerable<T> UpdateWhere<T>(this IEnumerable<T> enumerable, |
|
164 |
Action<T> update, Func<T, bool> where) where T : class |
|
165 |
{ |
|
166 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
167 |
ArgumentCheck.IsNullorWhiteSpace(update, "update"); |
|
168 |
foreach (var item in enumerable) |
|
169 |
{ |
|
170 |
if (where(item))//UpdateWhere에서 맨마지막 조건 |
|
171 |
{//그리드 collection 돌면서 where절 조건 만족하면 update |
|
172 |
update(item);//그리드 status와 디비 status 같으면 업데이트 |
|
173 |
}//업데이트 함수 |
|
174 |
} |
|
175 |
return enumerable; |
|
176 |
} |
|
177 |
|
|
178 |
/// <summary> |
|
179 |
/// Update all elements of IEnumerable by the update function (only works with reference types) |
|
180 |
/// Except the elements from the where function |
|
181 |
/// </summary> |
|
182 |
/// <param name="enumerable">The enumerable where you want to change stuff</param> |
|
183 |
/// <param name="update">The way you want to change the stuff</param> |
|
184 |
/// <param name="where">The function to check where changes should not be made</param> |
|
185 |
/// <returns> |
|
186 |
/// The same enumerable you passed in |
|
187 |
/// </returns> |
|
188 |
public static IEnumerable<T> UpdateExcept<T>(this IEnumerable<T> enumerable, |
|
189 |
Action<T> update, Func<T, bool> where) where T : class |
|
190 |
{ |
|
191 |
ArgumentCheck.IsNullorWhiteSpace(enumerable, "enumerable"); |
|
192 |
ArgumentCheck.IsNullorWhiteSpace(update, "update"); |
|
193 |
|
|
194 |
foreach (var item in enumerable) |
|
195 |
{ |
|
196 |
if (!where(item)) |
|
197 |
{ |
|
198 |
update(item); |
|
199 |
} |
|
200 |
} |
|
201 |
return enumerable; |
|
202 |
} |
|
203 |
} |
|
204 |
} |
ConvertService/ServiceController/Markus.Service.Extensions/Exntensions/Encrypt.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.IO; |
|
4 |
using System.Linq; |
|
5 |
using System.Security.Cryptography; |
|
6 |
using System.Text; |
|
7 |
using System.Threading.Tasks; |
|
8 |
|
|
9 |
namespace Markus.Service.Extensions |
|
10 |
{ |
|
11 |
public class Encrypt |
|
12 |
{ |
|
13 |
public static class AESEncrypter |
|
14 |
{ |
|
15 |
private static RijndaelManaged _rManaged = new RijndaelManaged(); |
|
16 |
private static UTF8Encoding _utf8Encoder = new UTF8Encoding(); |
|
17 |
|
|
18 |
static AESEncrypter() |
|
19 |
{ |
|
20 |
MD5 _md5 = new MD5CryptoServiceProvider(); |
|
21 |
|
|
22 |
_rManaged.KeySize = 256; |
|
23 |
_rManaged.BlockSize = 128; |
|
24 |
_rManaged.Mode = CipherMode.CBC; |
|
25 |
_rManaged.Padding = PaddingMode.PKCS7; |
|
26 |
_rManaged.Key = _md5.ComputeHash(_utf8Encoder.GetBytes("zxcvbnmasdfghjklqwertyuiop098765")); |
|
27 |
_rManaged.IV = _md5.ComputeHash(_utf8Encoder.GetBytes("qwertyuiopasdfghjklzxcvbnm123456")); |
|
28 |
} |
|
29 |
/// <summary>암호화</summary> |
|
30 |
/// <param name="val">암호화할 값</param> |
|
31 |
/// <returns>암호화된 값</returns> |
|
32 |
public static string Encrypt(string val) |
|
33 |
{ |
|
34 |
string _resVal = string.Empty; |
|
35 |
byte[] _utf8Val = null; |
|
36 |
byte[] _encryptVal = null; |
|
37 |
ICryptoTransform tForm = _rManaged.CreateEncryptor(); |
|
38 |
|
|
39 |
try |
|
40 |
{ |
|
41 |
if (!string.IsNullOrEmpty(val)) |
|
42 |
{ |
|
43 |
_utf8Val = _utf8Encoder.GetBytes(val); |
|
44 |
_encryptVal = tForm.TransformFinalBlock(_utf8Val, 0, _utf8Val.Length); |
|
45 |
_resVal = Convert.ToBase64String(_encryptVal); |
|
46 |
} |
|
47 |
else |
|
48 |
_resVal = string.Empty; |
|
49 |
} |
|
50 |
catch |
|
51 |
{ |
|
52 |
_resVal = string.Empty; |
|
53 |
} |
|
54 |
|
|
55 |
return _resVal; |
|
56 |
} |
|
57 |
/// <summary>복호화</summary> |
|
58 |
/// <param name="val">복호화할 값</param> |
|
59 |
/// <returns>복호화된 값</returns> |
|
60 |
public static string Decrypt(string val) |
|
61 |
{ |
|
62 |
string _resVal = string.Empty; |
|
63 |
byte[] _decryptVal = null; |
|
64 |
byte[] _encryptVal = null; |
|
65 |
ICryptoTransform tForm = _rManaged.CreateDecryptor(); |
|
66 |
|
|
67 |
try |
|
68 |
{ |
|
69 |
if (!string.IsNullOrEmpty(val)) |
|
70 |
{ |
|
71 |
_encryptVal = Convert.FromBase64String(val); |
|
72 |
_decryptVal = tForm.TransformFinalBlock(_encryptVal, 0, _encryptVal.Length); |
|
73 |
_resVal = _utf8Encoder.GetString(_decryptVal); |
|
74 |
} |
|
75 |
else |
|
76 |
_resVal = string.Empty; |
|
77 |
} |
|
78 |
catch |
|
79 |
{ |
|
80 |
_resVal = string.Empty; |
|
81 |
} |
|
82 |
|
|
83 |
return _resVal; |
|
84 |
} |
|
85 |
} |
|
86 |
} |
|
87 |
} |
ConvertService/ServiceController/Markus.Service.Extensions/Exntensions/GenericPluginLoader.cs | ||
---|---|---|
1 |
/* |
|
2 |
Copyright 2013 Christoph Gattnar |
|
3 |
|
|
4 |
Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 |
you may not use this file except in compliance with the License. |
|
6 |
You may obtain a copy of the License at |
|
7 |
|
|
8 |
http://www.apache.org/licenses/LICENSE-2.0 |
|
9 |
|
|
10 |
Unless required by applicable law or agreed to in writing, software |
|
11 |
distributed under the License is distributed on an "AS IS" BASIS, |
|
12 |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 |
See the License for the specific language governing permissions and |
|
14 |
limitations under the License. |
|
15 |
*/ |
|
16 |
|
|
17 |
using System; |
|
18 |
using System.Collections.Generic; |
|
19 |
using System.IO; |
|
20 |
using System.Reflection; |
|
21 |
|
|
22 |
namespace Markus.Service.Extensions |
|
23 |
{ |
|
24 |
public static class GenericPluginLoader<T> |
|
25 |
{ |
|
26 |
public static ICollection<T> LoadPlugins(string path) |
|
27 |
{ |
|
28 |
string[] dllFileNames = null; |
|
29 |
|
|
30 |
if(Directory.Exists(path)) |
|
31 |
{ |
|
32 |
dllFileNames = Directory.GetFiles(path, "*.dll"); |
|
33 |
|
|
34 |
ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length); |
|
35 |
foreach(string dllFile in dllFileNames) |
|
36 |
{ |
|
37 |
AssemblyName an = AssemblyName.GetAssemblyName(dllFile); |
|
38 |
Assembly assembly = Assembly.Load(an); |
|
39 |
assemblies.Add(assembly); |
|
40 |
} |
|
41 |
|
|
42 |
Type pluginType = typeof(T); |
|
43 |
ICollection<Type> pluginTypes = new List<Type>(); |
|
44 |
foreach(Assembly assembly in assemblies) |
|
45 |
{ |
|
46 |
if(assembly != null) |
|
47 |
{ |
|
48 |
Type[] types = assembly.GetTypes(); |
|
49 |
|
|
50 |
foreach(Type type in types) |
|
51 |
{ |
|
52 |
if(type.IsInterface || type.IsAbstract) |
|
53 |
{ |
|
54 |
continue; |
|
55 |
} |
|
56 |
else |
|
57 |
{ |
|
58 |
if(type.GetInterface(pluginType.FullName) != null) |
|
59 |
{ |
|
60 |
pluginTypes.Add(type); |
|
61 |
} |
|
62 |
} |
|
63 |
} |
|
64 |
} |
|
65 |
} |
|
66 |
|
|
67 |
ICollection<T> plugins = new List<T>(pluginTypes.Count); |
|
68 |
foreach(Type type in pluginTypes) |
|
69 |
{ |
|
70 |
T plugin = (T)Activator.CreateInstance(type); |
|
71 |
plugins.Add(plugin); |
|
72 |
} |
|
73 |
|
|
74 |
return plugins; |
|
75 |
} |
|
76 |
|
|
77 |
return null; |
|
78 |
} |
|
79 |
} |
|
80 |
} |
ConvertService/ServiceController/Markus.Service.Extensions/Exntensions/Process.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Diagnostics; |
|
4 |
using System.Linq; |
|
5 |
using System.Management; |
|
6 |
using System.Text; |
|
7 |
using System.Threading.Tasks; |
|
8 |
|
|
9 |
namespace Markus.Service.Extensions |
|
10 |
{ |
|
11 |
public static class ProcessExtension |
|
12 |
{ |
|
13 |
/// <summary> |
|
14 |
/// 프로세스의 명령줄을 가져온다. |
|
15 |
/// </summary> |
|
16 |
/// <param name="process"></param> |
|
17 |
/// <returns></returns> |
|
18 |
public static ProcessArguments Arguments(this Process process) |
|
19 |
{ |
|
20 |
ProcessArguments result = new ProcessArguments(); |
|
21 |
|
|
22 |
var commandLine = ProcessCommandLinesQuery(process.Id); |
|
23 |
|
|
24 |
try |
|
25 |
{ |
|
26 |
result.WorkingDirectory = ProcessWorkingDirectory(commandLine); |
|
27 |
|
|
28 |
result.CommandLine = SplitArguments(RemoveCommadLinesFilePath(commandLine)).ToList(); |
|
29 |
} |
|
30 |
catch (Exception ex) |
|
31 |
{ |
|
32 |
System.Diagnostics.Debug.WriteLine(ex.ToString()); |
|
33 |
} |
|
34 |
return result; |
|
35 |
} |
|
36 |
|
|
37 |
/// <summary> |
|
38 |
/// 프로세스의 실행 경로 |
|
39 |
/// </summary> |
|
40 |
/// <param name="process"></param> |
|
41 |
/// <returns></returns> |
|
42 |
public static string WorkingDirectory(this Process process) |
|
43 |
{ |
|
44 |
var commandLine = ProcessCommandLinesQuery(process.Id); |
|
45 |
return ProcessWorkingDirectory(commandLine); |
|
46 |
} |
|
47 |
|
|
48 |
private static string ProcessCommandLinesQuery(int processId) |
|
49 |
{ |
|
50 |
string result = ""; |
|
51 |
|
|
52 |
string wmiQuery = string.Format("select CommandLine from Win32_Process where ProcessId ='{0}'", processId); |
|
53 |
|
|
54 |
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery); |
|
55 |
ManagementObjectCollection retObjectCollection = searcher.Get(); |
|
56 |
|
|
57 |
if (retObjectCollection.Count > 0) |
|
58 |
{ |
|
59 |
if (retObjectCollection.Cast<ManagementObject>().First()["CommandLine"] != null) |
|
60 |
{ |
|
61 |
result = retObjectCollection.Cast<ManagementObject>().First()["CommandLine"]?.ToString(); |
|
62 |
} |
|
63 |
else |
|
64 |
{ |
|
65 |
result = ""; |
|
66 |
} |
|
67 |
} |
|
68 |
|
|
69 |
return result; |
|
70 |
} |
|
71 |
|
|
72 |
private static string ProcessWorkingDirectory(string commandLine) |
|
73 |
{ |
|
74 |
if (IO.FileExists(commandLine.Replace("\"", ""))) |
|
75 |
{ |
|
76 |
var file = new System.IO.FileInfo(commandLine.Replace("\"", "")); |
|
77 |
return file.DirectoryName; |
|
78 |
} |
|
79 |
|
|
80 |
var splitCommand = commandLine.Split(' '); |
|
81 |
string filePath = ""; |
|
82 |
|
|
83 |
for (int i = 0; i < splitCommand.Count(); i++) |
|
84 |
{ |
|
85 |
filePath += " " + splitCommand[i].Replace("\"", ""); |
|
86 |
|
|
87 |
if (IO.FileExists(filePath)) |
|
88 |
{ |
|
89 |
System.IO.FileInfo info = new System.IO.FileInfo(filePath); |
|
90 |
filePath = info.DirectoryName; |
|
91 |
break; |
|
92 |
} |
|
93 |
else if (i == splitCommand.Count() - 1) |
|
94 |
{ |
|
95 |
var firstCmd = splitCommand.First(); |
|
96 |
|
|
97 |
if (firstCmd.StartsWith("\"") && firstCmd.EndsWith("\"")) |
|
98 |
{ |
|
99 |
filePath = firstCmd.Replace("\"", ""); |
|
100 |
} |
|
101 |
} |
|
102 |
else |
|
103 |
{ |
|
104 |
filePath = commandLine; |
|
105 |
} |
|
106 |
} |
|
107 |
|
|
108 |
return filePath; |
|
109 |
} |
|
110 |
|
|
111 |
/// <summary> |
|
112 |
/// command line에서 처음에 있는 파일 경로가 \"로 묶여 있거나 묶여 있지 않은 경우가 있다. |
|
113 |
/// 파일 경로를 제거하기 위한 코드 |
|
114 |
/// </summary> |
|
115 |
/// <param name="commandLine"></param> |
|
116 |
/// <returns></returns> |
|
117 |
private static string RemoveCommadLinesFilePath(string commandLine) |
|
118 |
{ |
|
119 |
string result = ""; |
|
120 |
|
|
121 |
var splitCommand = commandLine.Split(' '); |
|
122 |
string filePath = ""; |
|
123 |
|
|
124 |
for (int i = 0; i < splitCommand.Count(); i++) |
|
125 |
{ |
|
126 |
filePath += " " + splitCommand[i]; |
|
127 |
|
내보내기 Unified diff