Почему можно читать его через smb, но невозможно прочитать по-другому?
Я думаю, это связано с параметрами, переданными в CreateFile
.
Например, при открытии файла с
CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, ...)
запрашивается доступ на чтение, в то время как другие могут читать и писать.Это, вероятно, то, что делает служба SMB.
При открытии как
CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, ...)
запрашивается доступ на чтение / запись, в то время как другие не могут писать.Пакетный сценарий, вероятно, делает это.
Наконец, NotepadCE может попытаться открыть файл, используя
CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, ...)
, что не удастся, так как он запрашивает доступ для записи, который пакетный интерпретатор отклонил, передавтолько FILE_SHARE_READ
в вызове CreateFile
.
Конечно, без доступа к исходному коду это все догадки, но если вы можете открыть файл локально, как показано в первом примере выше, то он поддерживаеттеория.
Подробнее о CreateFile в Документах.
Есть ли способ, позволяющий другим программам на компьютере с Windows CE читать этот файл без остановкиmyapp.exe?
Вроде да.Вместо перенаправления stderr просто напишите myapp.exe свои выходные данные непосредственно в myfile.err, передавая FILE_SHARE_READ | FILE_SHARE_WRITE
в вызове CreateFile
при создании файла.Это позволило бы другим программам, которые запрашивают доступ для записи, открыть myfile.err.