Я пишу программу для работы в качестве плагина тестирования со сторонней программой.Я говорил с разработчиком на другом конце (не начинайте меня), и он использует VB 6 для создания пакетного файла, а затем вызывает пакетный файл с помощью команды оболочки.Его пакетный файл вызывает мой плагин, который я записал для вывода данных в файл на основе параметров, которые я получаю через его пакетный файл.
Моя проблема заключается в том, что когда его программа вызывает пакетный файл с помощью команды оболочки(опять же, он использует VB 6), моя программа выполняется, и выполняются записи консоли, которые я установил перед и после файлового потока, но файлы не создаются, и поэтому его программа не читает файл, который я создаю(CP07.txt в этом случае).Если я вручную запускаю командный файл из проводника Windows, все работает как положено.У меня есть захват монитора процесса, если это полезно.Программа работает как локальный администратор на машине с Win7 (хотя она и не повышена), UAC отключен, антивирусное программное обеспечение не установлено и запись в корневую или системную папку отсутствует.
Я ценю любые указатели.Поскольку захват ProcMon длинный (1400+ строк), я не опубликовал его.
С уважением, S
Вот пример пакетного файла из другой программы ...
- Полный путь к моему exe
- Полный путь к выходному файлу
- Параметр для моего использования
- Имя пользователя
Пароль
C: \ SpecifiedDir \ myprogram.exe C: \ Specified \ Directory \ CP07.txt параметр имя пользователя пароль
Я перезаписываю параметр выходного файла, как вы видите, потому что онизначально не работал другим способом (я думаю, может быть, что-то связано с экранированными слешами или что-то в этом роде), и я хотел начать с простой и работающей программы, а затем очистить ее оттуда.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Plugin
{
class Program
{
static void Main(string[] args)
{
Console.Write("Press any key to begin: ");
Console.Write("Starting...", Console.ReadLine());
//Console.WriteLine("Done");
Console.WriteLine("Number of command line parameters = {0}",args.Length);
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
}
Console.WriteLine("");
TextWriter defaultOutputMethod = Console.Out;
TextWriter defaultErrorOutputMethod = Console.Error;
FileStream fStream;
StreamWriter strWriter;
FileStream fErrorStream;
StreamWriter strErrorWriter;
try
{
fStream = new FileStream("./Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
strWriter = new StreamWriter(fStream);
}
catch (Exception e)
{
Console.WriteLine("Cannot open Redirect.txt for writing");
Console.WriteLine(e.Message);
return;
}
try
{
fErrorStream = new FileStream("./RedirectError.txt", FileMode.OpenOrCreate, FileAccess.Write);
strErrorWriter = new StreamWriter(fErrorStream);
}
catch (Exception e)
{
Console.WriteLine("Cannot open RedirectError.txt for writing");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(strWriter);
Console.SetError(strErrorWriter);
Console.WriteLine("Number of command line parameters = {0}", args.Length);
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
}
// Store parameters into variables for reference
string pSuccess = "OK";
string pFail = "FAIL";
string pOutputFile = args[0];
string pLookupType = args[1];
string pUserName = args[2];
string pPassword = args[3];
Console.SetOut(defaultOutputMethod);
// Console.SetError(defaultErrorOutputMethod);
strWriter.Close();
fStream.Close();
// Setup Commnet filestream and stream writer, and assign output to stream if file successfully created
FileStream fCommnetStream;
StreamWriter strCommnetWriter;
string sCommnetOutputFile = @"./CP07.txt";
try
{
fCommnetStream = new FileStream(sCommnetOutputFile, FileMode.OpenOrCreate, FileAccess.Write);
strCommnetWriter = new StreamWriter(fCommnetStream);
}
catch (Exception e)
{
Console.WriteLine("Cannot open " + sCommnetOutputFile + " for writing");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(strCommnetWriter);
// Test Variables to determine output: Success or Failure
string sSuccessPass = "1111";
string sFailPass = "0000";
if (pPassword == sSuccessPass)
{
Console.WriteLine(pSuccess);
}
else if (pPassword == sFailPass)
{
Console.WriteLine(pFail);
}
else
{
Console.WriteLine("OTHER");
}
Console.WriteLine("Output File: <" + pOutputFile + ">");
Console.WriteLine("Lookup Type: <" + pLookupType + ">");
Console.WriteLine("User Name: <" + pUserName + ">");
Console.WriteLine("User Pass: <" + pPassword + ">");
Console.SetOut(defaultOutputMethod);
Console.SetError(defaultErrorOutputMethod);
strCommnetWriter.Close();
fCommnetStream.Close();
strErrorWriter.Close();
fErrorStream.Close();
Console.Write("Press any key to finish: ");
Console.Write("Ending...", Console.ReadLine());
//Console.WriteLine("Done");
}
}
}