Я использую программное обеспечение SCADA (Aveva Intouch HMI), которое поддерживает импорт библиотек .NET в качестве файлов .dll для использования более быстрых пользовательских функций в своей среде сценариев (я считаю, что они поддерживают vb.net; я использовал C# и составил его в библиотеку .NET DLL). < /p>
Я написал код, который читает файл в библиотеке в библиотеке. Он работает нормально, пока я не попытаюсь прочитать тот же файл, который время выполнения SCADA использует для регистрации исторических данных. Как только программное обеспечение SCADA прекратит регистрацию в этом файле, я могу получить доступ и прочитать его содержимое. Однако странно то, что я могу открыть один и тот же файл, используя блокнот (внешний процесс). Но если я попытаюсь открыть его, используя запускаемый скрипт из самой среды выполнения SCADA, я получаю следующее исключение: < /p>
Процесс не может получить доступ к файлу, потому что он используется другим процессом. Есть обходной путь? Мне нужно открыть этот файл, используя мои внешние библиотеки для выполнения критического анализа. Однако, если я попытаюсь открыть его из запускаемого сценария - например, нажав кнопку, он бросает исключение. < /P>
/*C# Code:************************************************/
public class IntResult
{
public string ErrorMessage { get; internal set; }
public int Result { get; internal set; }
}
public static class LGHFile
{
// This pattern mark the start of every block in the log file
readonly private static byte[] _blockStartPattern = new byte[] { 0xBC, 0x1B, 0x02, 0x00, 0x16, 0x00, 0x00, 0x00, 0x70, 0xB6, 0x32, 0x07, 0x70, 0x33, 0xDC, 0x01};
public static IntResult FindPattern(int startSearch, string path)
{
IntResult intResult = new IntResult();
intResult.Result = -1;
intResult.ErrorMessage = "No Error";
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
try
{
byte[] data = new byte[1000000];
fileStream.Read(data, 0, 1000000);
int patternAddress = -1;
for (int i = startSearch; i < data.Length - _blockStartPattern.Length + 1; i++)
{
bool found = true;
for (int j = 0; j < _blockStartPattern.Length; j++)
{
if (data[i + j] != _blockStartPattern[j])
{
found = false;
break;
}
}
if (found)
{
patternAddress = i;
break;
}
}
intResult.Result = patternAddress;
fileStream.Close();
}
catch (System.Exception ex)
{
intResult.ErrorMessage = ex.Message;
fileStream.Close();
}
return intResult;
}
}
< /code>
Это код Scada: < /p>
// SCADA Script Execute when click on the push
dim result as VAInTouchTools.Wrapper.IntResult;
result = VAInTouchTools.Wrapper.LGHFile.FindPattern(VA_INT_TAG_NUMBER_09, "E:\\Projects\\TopNav_004\\25100500.lgh");
VA_INT_TAG_NUMBER_10 = result.Result;
TextBox1.Text = result.ErrorMessage;
Подробнее здесь: https://stackoverflow.com/questions/797 ... -applicati
C# .net DLL дает отклонен доступа к файлу при вызове из стороннего приложения [закрыто] ⇐ C#
Место общения программистов C#
1759751150
Anonymous
Я использую программное обеспечение SCADA (Aveva Intouch HMI), которое поддерживает импорт библиотек .NET в качестве файлов .dll для использования более быстрых пользовательских функций в своей среде сценариев (я считаю, что они поддерживают vb.net; я использовал C# и составил его в библиотеку .NET DLL). < /p>
Я написал код, который читает файл в библиотеке в библиотеке. Он работает нормально, пока я не попытаюсь прочитать тот же файл, который время выполнения SCADA использует для регистрации исторических данных. Как только программное обеспечение SCADA прекратит регистрацию в этом файле, я могу получить доступ и прочитать его содержимое. Однако странно то, что я могу открыть один и тот же файл, используя блокнот (внешний процесс). Но если я попытаюсь открыть его, используя запускаемый скрипт из самой среды выполнения SCADA, я получаю следующее исключение: < /p>
Процесс не может получить доступ к файлу, потому что он используется другим процессом. Есть обходной путь? Мне нужно открыть этот файл, используя мои внешние библиотеки для выполнения критического анализа. Однако, если я попытаюсь открыть его из запускаемого сценария - например, нажав кнопку, он бросает исключение. < /P>
/*C# Code:************************************************/
public class IntResult
{
public string ErrorMessage { get; internal set; }
public int Result { get; internal set; }
}
public static class LGHFile
{
// This pattern mark the start of every block in the log file
readonly private static byte[] _blockStartPattern = new byte[] { 0xBC, 0x1B, 0x02, 0x00, 0x16, 0x00, 0x00, 0x00, 0x70, 0xB6, 0x32, 0x07, 0x70, 0x33, 0xDC, 0x01};
public static IntResult FindPattern(int startSearch, string path)
{
IntResult intResult = new IntResult();
intResult.Result = -1;
intResult.ErrorMessage = "No Error";
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
try
{
byte[] data = new byte[1000000];
fileStream.Read(data, 0, 1000000);
int patternAddress = -1;
for (int i = startSearch; i < data.Length - _blockStartPattern.Length + 1; i++)
{
bool found = true;
for (int j = 0; j < _blockStartPattern.Length; j++)
{
if (data[i + j] != _blockStartPattern[j])
{
found = false;
break;
}
}
if (found)
{
patternAddress = i;
break;
}
}
intResult.Result = patternAddress;
fileStream.Close();
}
catch (System.Exception ex)
{
intResult.ErrorMessage = ex.Message;
fileStream.Close();
}
return intResult;
}
}
< /code>
Это код Scada: < /p>
// SCADA Script Execute when click on the push
dim result as VAInTouchTools.Wrapper.IntResult;
result = VAInTouchTools.Wrapper.LGHFile.FindPattern(VA_INT_TAG_NUMBER_09, "E:\\Projects\\TopNav_004\\25100500.lgh");
VA_INT_TAG_NUMBER_10 = result.Result;
TextBox1.Text = result.ErrorMessage;
Подробнее здесь: [url]https://stackoverflow.com/questions/79783498/c-sharp-net-dll-gives-file-access-denied-when-called-from-third-party-applicati[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия