У меня есть ActiveX.
ActiveX означает:
- Internet Explorer
- собственный двоичный код
- , запущенный из DLL(.ocx)
- в защищенном режиме
Пользователь хочет сохранить некоторый контент.я хотел бы показать диалоговое окно Сохранить как , а затем сохранить в указанном месте.
Поскольку процесс, на котором размещен мой ActiveX, работает на уровне целостности Низкий ,код не может быть сохранен в запрошенном месте пользователя.
Поскольку процесс, на котором размещен мой ActiveX, работает в защищенном режиме Internet Explorer, код не может быть сохранен в запрошенном месте пользователя.
Вместо этого файлымолча сохраняется в месте, которое пользователь не запрашивал.
Вместо этого файлы молча сохраняются в месте, где конечный пользователь не может их найти.
Есть ли предложениякак с этим справиться?
Bonus Chatter
Что пользователь пытается сохранить на свой жесткий диск?Это не имеет значения для вопроса.Но притворитесь:
- это 3D-сетка размером в несколько сотен мегабайт
- это дамп изображений ГИС
- это PDF
- это PNG
- это текстовый файл
Дополнительное чтение
Internet Explorer защищенный режим api позволяет надстройкам показывать сохраненный журнал:
IEShowSaveFileDialog(this.Handle, "Eden.3ds",
GetUserDocumentsFolder(), null,
"3D Studio File|*.3ds|GIS Imagery|*.kvm|Adobe Acrobat File|*.pdf|All Files|*.*|"
null, 0,
OFN_ENABLESIZING | OFN_PATHMUSTEXIST,
ref destinationPath, ref stateCookie);
и затем сохраните файл, используя cookie , который при условии сохранения:
IESaveFile(stateCookie, sourcefilename);
Где sourcefilename
будет файлом, который мне удалось сохранить где-то (чтодругой вопрос).
Чтение бонусов
Сохранение файлов в профиле пользователя
Некоторые расширения должны сохранять файлы в определенном месте, чтобы впоследствии пользователи или приложения могли найти файлы.Следующие шаги показывают, как сохранить файл за пределами места с низким уровнем целостности:
Создать временную версию файла в% userprofile% \ AppData \ LocalLow.Не забудьте удалить временный файл после успешного его сохранения.
Вызовите IEShowSaveFileDialog
, указав местоположение папки профиля пользователя, чтобы предложить пользователю сохранить файл в другом месте.Если пользователь принимает диалоговое окно Сохранить как , IEShowSaveFileDialog возвращает выбранную папку назначения.
Вызов IESaveFile
с указанием места временного хранения.файл, сохраненный на шаге 1.
При этом посредник пользователя в защищенном режиме копирует файл из временного расположения в местоположение, выбранное пользователем.