equal
deleted
inserted
replaced
|
1 #include <algorithm> |
|
2 #include <windows.h> |
|
3 |
|
4 #include "SysInfo.h" |
|
5 #include "FileUtils.h" |
|
6 #include "Executor.h" |
|
7 #include "Resources.h" |
|
8 #include "WinErrorHandling.h" |
|
9 |
|
10 |
|
11 int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int nShowCmd) |
|
12 { |
|
13 JP_TRY; |
|
14 |
|
15 // Create temporary directory where to extract msi file. |
|
16 const auto tempMsiDir = FileUtils::createTempDirectory(); |
|
17 |
|
18 // Schedule temporary directory for deletion. |
|
19 FileUtils::Deleter cleaner; |
|
20 cleaner.appendRecursiveDirectory(tempMsiDir); |
|
21 |
|
22 const auto msiPath = FileUtils::mkpath() << tempMsiDir << L"main.msi"; |
|
23 |
|
24 // Extract msi file. |
|
25 Resource(L"msi", RT_RCDATA).saveToFile(msiPath); |
|
26 |
|
27 // Setup executor to run msiexec |
|
28 Executor msiExecutor(SysInfo::getWIPath()); |
|
29 msiExecutor.arg(L"/i").arg(msiPath); |
|
30 const auto args = SysInfo::getCommandArgs(); |
|
31 std::for_each(args.begin(), args.end(), |
|
32 [&msiExecutor] (const tstring& arg) { |
|
33 msiExecutor.arg(arg); |
|
34 }); |
|
35 |
|
36 // Install msi file. |
|
37 return msiExecutor.execAndWaitForExit(); |
|
38 |
|
39 JP_CATCH_ALL; |
|
40 |
|
41 return -1; |
|
42 } |