Я пишу программу для работы в качестве тестового плагина со сторонней программой. Я разговаривал с разработчиком на другом конце (не заводите меня), и он использует VB 6 для создания пакетного файла, а затем вызывает пакетный файл с помощью команды оболочки. Его пакетный файл вызывает мой плагин, который я написал для вывода данных в файл на основе параметров, которые я получаю через его пакетный файл.
Моя проблема в том, что когда его программа вызывает пакетный файл с помощью команды оболочки (опять же, он использует VB 6), моя программа выполняется, и строки записи консоли, которые я помещаю перед и после файлового потока, все выполняются, но файлы не создаются, и поэтому его программа не читает файл, который я создаю (в данном случае CP07.txt). Если я вручную запускаю пакетный файл из проводника Windows, все работает как положено. У меня есть захват монитора процесса, если это полезно. Программа работает от имени локального администратора на машине с Win7 (хотя она не имеет повышенных прав), UAC отключен, антивирусное программное обеспечение не установлено, и она не пишет в корневую или системную папку.
Я ценю любые указатели. Так как захват ProcMon длинный (1400+ строк), я его не выложил.
С уважением, С
Вот пример пакетного файла из другой программы...
- Полный путь к моему 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");
}
}
}