У меня есть собственный класс, мы назовем его FileProcessUpload, и он расширяет RunBaseBatch. Он более или менее создает файл CSV, а затем загружает его на FTP-сервер. Когда класс запускается вручную, все работает нормально. Однако при отправке в виде пакетного задания в инфологе появляется ошибка «Объект AsciiIO не инициализирован».
Вероятно, самое важное, что здесь следует отметить, - это то, что это пакетное задание делегируется другому AOS.
Вот сокращенная версия вредоносного кода:
void CreateFiles()
{
#File
AsciiIO asciiio;
FileIOPermission permission;
ATable aTable;
str outputFile;
str directory;
;
directory = @'C:\Uploads';
ouptutFile = directory + @'\output.csv';
if (!WinAPI::folderExists(directory))
{
WinAPI::createDirectory(directory);
}
// Try to assert the appropriate file access mode
permission = new FileIOPermission(outputFile, #io_write);
permission.assert();
// Try to open the file for writing
asciiio = new AsciiIO(outputFile, #io_write);
if (asciiio != null)
{
while select aTable
{
// Write the necessary lines into the file
asciiio.write(aTable.field1 + ',' + aTable.field2);
}
}
else
{
error('Could not create file: ' + outputFile);
}
// Close file and release permission assertion
asciiio = null;
CodeAccessPermission::revertAssert();
}
The server-side impersonated (RunAs) session tried to invoke a method that is available for client-side processing only.
Кроме того, все в порядке: файл создан, текст написан. - person 10p   schedule 18.10.2011