char szErr[256];
LPCSTR lpszInstall = nullptr;
LPCSTR lpszRemove = nullptr;
+LPCSTR lpszStdout = nullptr;
+LPCSTR lpszStderr = nullptr;
// internal function prototypes
VOID WINAPI service_ctrl(DWORD dwCtrlCode);
}
-int real_main(int); // The revised two-phase main() in shar.cpp
+int real_main(int); // The revised two-phase main() in shibd.cpp
int main(int argc, char *argv[])
{
if (argc > ++i)
lpszRemove = argv[i++];
}
+ else if (_stricmp("stdout", argv[i]+1) == 0)
+ {
+ if (argc > ++i) {
+ lpszStdout = argv[i++];
+ freopen(lpszStdout, "a+", stdout);
+ }
+ }
+ else if (_stricmp("stderr", argv[i]+1) == 0)
+ {
+ if (argc > ++i) {
+ lpszStderr = argv[i++];
+ freopen(lpszStderr, "a+", stderr);
+ }
+ }
else if (_stricmp( "console", argv[i]+1) == 0)
{
i++;
printf("%s -remove <name> to remove the named service\n", argv[0]);
printf("%s -console to run as a console app for debugging\n", argv[0]);
printf("%s -check to run as a console app and check configuration\n", argv[0]);
+ printf("\t-stdout <path> to redirect stdout stream\n");
+ printf("\t-stderr <path> to redirect stderr stream\n");
printf("\t-prefix <dir> to specify the installation directory\n");
printf("\t-config <file> to specify the config file to use\n");
printf("\t-catalogs <catalog1:catalog2> to specify schema catalogs\n");
cmd = cmd + " -config " + shar_config;
if (shar_schemadir)
cmd = cmd + " -schemadir " + shar_schemadir;
+ if (lpszStdout)
+ cmd = cmd + " -stdout " + lpszStdout;
+ if (lpszStderr)
+ cmd = cmd + " -stderr " + lpszStderr;
schSCManager = OpenSCManager(
nullptr, // machine (nullptr == local)