Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
1

Динамически заменить ресурс приложения

15.07.2017, 21:14. Просмотров 280. Ответов 14
Метки нет (Все метки)

Доброго времени суток, Всем.
Есть программа, написанная на C#, которая заполняет шаблон Word документа. Этот шаблон находится в файлах ресурсах проекта.
Теперь появилась нужда иногда изменять этот шаблон, и сохранять опять в ресурсы программы. Такое реально сделать? Насколько я понимаю, файл ресурсов хранится в самом .exe'шнике, и придется изменять его динамически во время выполнения программы. Тоесть, к примеру, пользователь захотел изменить шаблон. Нажал на кнопку настроек, там ввел путь до нового шаблона Word, программа его в себя закачала, и теперь она работает с новым шаблоном Word, причем после перезапуска приложения этот новый шаблон остается.

Важно то, что шаблон Word должен быть в ресурсах, тоесть рядом с программой он не должен валяться. В C# слаб, может кто подскажет как такое реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2017, 21:14
Ответы с готовыми решениями:

Вызов функций приложения из динамически скомпилированного кода
Здравствуйте, я могу вызывать функции динамически скомпилированной формы, а как...

Сохранить динамически созданные формы после перезапуска приложения
здравствйте помогите разобраться с динамичесим програмировние После нажатия н...

Каждой динамически созданной кнопке свой динамически созданный PictureBox
Добрый день. Надеюсь, что пишу в тот раздел. Находил немного похожие темы:...

Ресурс в UserControl
Здравствуйте. Есть ли возможность запихнуть картинку (иконку)...

Не найден ресурс SplashScreen
Привет всем! Создаю сплешскрин:System.Windows.SplashScreen splashScreen = new...

14
ViterAlex
6677 / 3696 / 1512
Регистрация: 11.02.2013
Сообщений: 8,129
Завершенные тесты: 3
15.07.2017, 21:42 2
Вот зачем изменяемую часть хранить в ресурсах и потом извращаться, чтобы её там изменить? Затея тухлая, на мой взгляд. Тем более, что
Цитата Сообщение от Bretbas Посмотреть сообщение
В C# слаб
1
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
15.07.2017, 21:57 3
Bretbas, два момента мешают раелизации этой задачи - ресурсы не предназначены для изменения и исполняемый файл монопольно блокируется ОС пока приложение выполняется. Первый момент еще можно обойти, а со вторым сильно сложнее. Проще будет хранить шаблон в профиле пользователя и туда же его копировать когда пользователь выбирает новый.
2
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
16.07.2017, 07:44  [ТС] 4
OwenGlendower, тоесть пользователь сам должен копировать шаблон в папку пользователя?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
16.07.2017, 07:57 5
Bretbas, если ему так хочется, то пусть сам копирует, но я имел в виду что это будет делать программа.
0
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
16.07.2017, 08:29  [ТС] 6
OwenGlendower, Я что-то тебя не понял. У меня шаблон находится в ресурсах. Когда пользователь нажимает в программе кнопку, этот шаблон распаковывается в папку Temp на компьютере и запускается в Microsoft Word. Это на данном этапе времени.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
если ему так хочется, то пусть сам копирует, но я имел в виду что это будет делать программа.
Как программа будет это делать, если там запихнут старый шаблон, а пользователю нужен новый?
0
RunningMan
16.07.2017, 12:42
  #7

Не по теме:

Цитата Сообщение от Bretbas Посмотреть сообщение
Когда пользователь нажимает в программе кнопку, ..... запускается в Microsoft Word.
у меня так вообще оффиса нет ...

0
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
16.07.2017, 13:19 8
Bretbas, сейчас программа берет шаблон из ресурсов и копирует в папку Temp. Я предлагаю переделать код чтобы шаблон копировался из другой папки. Это так сложно понять и сделать? Алгоритм может быть таким:
1) Программа смотрит есть ли файл шаблона в папке MyTemplates (условное название)
2.1) Если да, то копирует его в папку Temp
2.2) Если нет, то распаковывает шаблон из ресурсов и копирует его в папку Temp
3) Запускаем Word
Когда пользователь выбирает шаблон, мы копируем его в папку MyTemplates (снова - условное название) и таким образом далее выполнение программы пойдет по пути 2.1. Если файла в папке MyTemplates нет, то по пути 2.2.

Папку MyTemplates предлагаю создавать в профиле пользователя.
C#
1
2
3
4
5
// Путь к папке с файлами из роуминговой части профиля пользователя
string roamingProfileRoot = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
 
// Путь к папке с нашими шаблонами Word
string myTemplatesPath = Path.Combine(roamingProfileRoot, "НазваниеТвоейПрограммы", "MyTemplates");
1
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
16.07.2017, 18:32  [ТС] 9
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
1) Программа смотрит есть ли файл шаблона в папке MyTemplates (условное название)
2.1) Если да, то копирует его в папку Temp
2.2) Если нет, то распаковывает шаблон из ресурсов и копирует его в папку Temp
3) Запускаем Word
Когда пользователь выбирает шаблон, мы копируем его в папку MyTemplates (снова - условное название) и таким образом далее выполнение программы пойдет по пути 2.1. Если файла в папке MyTemplates нет, то по пути 2.2.
Не понял только одно. Зачем тогда вообще папка temp? Просто программа работает с файлом word из папки MyTemplates (условное название). При запуске, она проверяет, есть ли там такой файл. Если нет, то подгружает его из своих ресурсов в ту же папку MyTemplates (условное название). А пользователь уже может подменить файл из папки MyTemplates (условное название) на свой новый. Вы это имели ввиду?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
16.07.2017, 18:45 10
Цитата Сообщение от Bretbas Посмотреть сообщение
Зачем тогда вообще папка temp?
Чтобы алгоритм был одинаковым для обоих случаев и чтобы пользовватель не мог изменить оригинальный файл

Цитата Сообщение от Bretbas Посмотреть сообщение
А пользователь уже может подменить файл из папки MyTemplates (условное название) на свой новый. Вы это имели ввиду?
Нет. То что я имел в виду ясно описано выше.
1
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
16.07.2017, 19:05  [ТС] 11
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Чтобы алгоритм был одинаковым для обоих случаев и чтобы пользовватель не мог изменить оригинальный файл
Что-то я совсем запутался. Как он изменит оригинал, если он в ресурсах находится? А если он все-таки его изменить, то значит это просто новый шаблон и все, продолжаем работать с новым шаблоном и не выгружаем из ресурсов.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Нет. То что я имел в виду ясно описано выше.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Когда пользователь выбирает шаблон, мы копируем его в папку MyTemplates (снова - условное название) и таким образом далее выполнение программы пойдет по пути 2.1. Если файла в папке MyTemplates нет, то по пути 2.2.
И что значит "Когда пользователь выбирает шаблон"? Где он его выбрать должен не пойму?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
17.07.2017, 11:26 12
Цитата Сообщение от Bretbas Посмотреть сообщение
Как он изменит оригинал, если он в ресурсах находится?
Под оригиналом имеется в виду не только файл в ресурсах который пользователь не сможет изменить, но и файл который находится в папке MyTemplates - это обычный файл и поэтому пользователь может делать с ним всё что угодно.

Цитата Сообщение от Bretbas Посмотреть сообщение
И что значит "Когда пользователь выбирает шаблон"? Где он его выбрать должен не пойму?
Цитата из твоего первого сообщения:
Цитата Сообщение от Bretbas Посмотреть сообщение
... Тоесть, к примеру, пользователь захотел изменить шаблон. Нажал на кнопку настроек, там ввел путь до нового шаблона Word, программа его в себя закачала, и теперь она работает с новым шаблоном ...
0
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
17.07.2017, 19:41  [ТС] 13
OwenGlendower,
Под оригиналом имеется в виду не только файл в ресурсах который пользователь не сможет изменить, но и файл который находится в папке MyTemplates - это обычный файл и поэтому пользователь может делать с ним всё что угодно.
Ну так и пусть делает что угодно Это же его шаблон, новый. Ведь он не захотел работать с тем, что ему предлагали(я имею ввиду из ресурсов программы), а захотел свой. Следовательно, так как это его шаблон, пусть его изменяет когда хочет. Или что-то я не понял опять?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9453 / 8271 / 3538
Регистрация: 17.03.2014
Сообщений: 16,468
Записей в блоге: 1
18.07.2017, 19:32 14
Цитата Сообщение от Bretbas Посмотреть сообщение
Ну так и пусть делает что угодно
Пусть делает. Тебе виднее что будет лучше для пользователей.

Цитата Сообщение от Bretbas Посмотреть сообщение
Или что-то я не понял опять?
Есть мнение что здесь взаимоНЕпонимание из-за того что мы по разному понимаем задачу.
0
Bretbas
Каждому свое
519 / 205 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
19.07.2017, 08:25  [ТС] 15
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Есть мнение что здесь взаимоНЕпонимание из-за того что мы по разному понимаем задачу.
Мне бы хотелось понимать задачу, как ее видите Вы, так как Вы более опытен
0
19.07.2017, 08:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2017, 08:25

Иконка как ресурс
Помешаю иконку в корень проекта и изменяю свойство "Действие при сборке" на...

Не выгружаются картинки в HTML ресурс
Есть ресурс в виде HTML странички. Его выгружаю в webBrowser1, всё хорошо, но...

Как вызвать ресурс через строковую переменную?
Есть текстовый документ abc.txt, представленный в виде ресурса в проекте,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru