@@ -58,26 +58,43 @@ PROCESS_INFORMATION Desktop::createProcess(
58
58
PROCESS_INFORMATION pi ;
59
59
memset (&pi , 0 , sizeof (pi ));
60
60
61
- bo::shared_ptr<wchar_t []> cmdLineTmp;
62
- if (!cmdLine.empty ()) {
61
+ bo::movelib::unique_ptr<wchar_t []> cmdLineTmp;
62
+ bo::movelib::unique_ptr<wchar_t []> appNameTmp;
63
+
64
+ if (!appName.empty () && !cmdLine.empty ()) {
63
65
wstring tmp = bo::from_utf8 (appName + " " + cmdLine);
64
66
65
67
cmdLineTmp.reset (new wchar_t [tmp.size ()+1 ]);
66
68
memmove (cmdLineTmp.get (), tmp.c_str (), tmp.size ()*sizeof (wchar_t ));
67
69
cmdLineTmp[tmp.size ()] = 0 ;
68
70
}
71
+ else if (!cmdLine.empty ()) {
72
+ wstring tmp = bo::from_utf8 (cmdLine);
73
+
74
+ cmdLineTmp.reset (new wchar_t [tmp.size ()+1 ]);
75
+ memmove (cmdLineTmp.get (), tmp.c_str (), tmp.size ()*sizeof (wchar_t ));
76
+ cmdLineTmp[tmp.size ()] = 0 ;
77
+ }
78
+
79
+ if (!appName.empty ()) {
80
+ wstring tmp = bo::from_utf8 (appName);
81
+
82
+ appNameTmp.reset (new wchar_t [tmp.size ()+1 ]);
83
+ memmove (appNameTmp.get (), tmp.c_str (), tmp.size ()*sizeof (wchar_t ));
84
+ appNameTmp[tmp.size ()] = 0 ;
85
+ }
69
86
70
87
BOOL created = CreateProcess (
71
- bo::from_utf8 (appName). c_str (),
88
+ appNameTmp. get (),
72
89
cmdLineTmp.get (),
73
90
NULL , NULL , FALSE , processCreationFlags, NULL , NULL ,
74
91
&si, &pi );
75
92
76
93
if (created == FALSE )
77
94
throw DesktopError (
78
95
bo::format (
79
- " Could not create the '%1%' process in the '%2%' desktop!" )
80
- % appName
96
+ " Could not run the '%1%' command in the '%2%' desktop!" )
97
+ % ( appName. empty () ? bo::to_utf8 (cmdLineTmp. get ()) : appName. c_str ())
81
98
% desktopName);
82
99
83
100
return pi ;
0 commit comments