2009-05-08 3 views
0

Я только что закончил приложение WinForms и отлично работает! Теперь время для развертывания. Проблема заключается в том, что я не хочу создавать установочный файл, а скорее один исполняемый файл, например «myApp.exe». Причина этого заключается в том, что она будет перераспределяться на носители CD, и она должна автоматически запускаться как автономное приложение, когда компакт-диск вставлен в компьютер пользователя.Проблема с развертыванием Windows Forms C# .net

Любые мысли здесь?

Во-вторых, как я могу создать ссылку на файлы .txt, содержащиеся на компакт-диске из приложения? Я хочу предоставить ссылки на файлы, но я не уверен, как сделать ссылку на путь.

TIA ... Im действительно озадачен здесь!

ответ

1

@Shalan, повторно: ваш ответ:

Будьте осторожны! Вы нарушите своих пользователей и программистов по обслуживанию!

Я видел и исправил эту ошибку хотя бы пару десятков раз.

Вы уверены, что знаете, что такое текущий каталог? Например, OpenFileDialog и SaveFileDialog могут изменить его, а затем вы не сможете найти свой .dot-файл.

Что делать, если пользователь запускает приложение с другим рабочим каталогом? Тогда вы тоже потерпите неудачу. Помните, что вы не можете контролировать свой рабочий каталог - ваше приложение не будет работать, если пользователь изменит его по умолчанию.

Если вы должны найти путь к исполняемому файлу приложения, рассмотрите возможность использования Application.StartupPath вместе с System.IO.Path. Например:

string dotSubPath = System.IO.Path.Combine("Assets", "MyDocument.dot"); 
string templatePath = System.IO.Path.Combine(Application.StartupPath, dotSubPath); 

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

+0

WOAH! спасибо за хедз-ап, Грег! Как я уже упоминал выше, файлы релизов будут скопированы на CD, а EXE будет запускаться непосредственно из корня этого компакт-диска. Но из-за того, что буква диска оптических дисков пользователей будет неизвестна, я решил пойти с вышеупомянутым маршрутом вместо этого. В приложении не используются диалоги, и я должен признать, что он работает. Пожалуйста, объясните мне, что означает «рабочий каталог» - это этот экземпляр. Спасибо! – Shalan

+0

... В этом случае .... – Shalan

+0

Он будет работать b/c. Каталог по умолчанию - это исполняемый каталог. Вы не можете гарантировать, что пользователи всегда будут запускать его точно с помощью конфигурации по умолчанию. Существует много разных способов изменения текущего рабочего каталога. Нет никаких дополнительных затрат, чтобы делать это правильно. Например, можете ли вы быть уверены, что никакая будущая версия этой программы никогда не будет использовать диалог? Конечно нет. –

1

Вы можете использовать встроенные ресурсы в ехе вместо отдельных файлов: http://jopinblog.wordpress.com/2007/11/12/embedded-resource-queries-or-how-to-manage-sql-code-in-your-net-projects/

+0

Хорошо, это здорово. Но будет ли это работать в этом экземпляре ... Я использую MS Office PIA, поэтому я фактически использую слияние почты для записи в некоторые поля шаблонов в документе MS Word «.dot». Должен ли я все еще вставлять это? – Shalan

+0

О, извините ... были ли вы ссылаться на библиотеки DLL, которые создаются при компиляции? – Shalan

+0

Нет, вы можете вставлять любой тип файла, который вы хотите. Однако не уверен в части MS Office. – JohnOpincar

2

При ссылке файлов, «.txt» в вашем коде, просто используйте относительный путь от того, где приложения выполняются с. Например, если ваши .txt-файлы находятся в том же каталоге, что и исполняемый файл, обратитесь к ним без какого-либо пути («filename.txt») или вы можете использовать («. \ Filename.txt»).

Насколько вы не устанавливаете приложение, просто убедитесь, что вы не используете сторонние библиотеки, которые необходимо установить на клиентах, и просто запишите содержимое вашего каталога apps/bin/и используйте autorun.ini файл для запуска вашего exe.

+0

эй devSolo! спасибо за это!Обычно я сохраняю все свои файлы в папке «активы», поэтому я могу ссылаться на файл txt как «. \ Assets \ file.txt», правильно? Я использую сторонние DLL-файлы, но в папке «Ссылки» в решении xplorer Ive установил «copy local» propoerty в true. Одна вещь, хотя в прошлом, когда я построил решение, 2 папки, которые раньше отображались в корзине - «debug» и «release», последний из которых больше не существует. Я знаю, что это тот, который нужно использовать, но, похоже, не видит его. Извините, это было время, так как я создал приложение Winforms! спасибо! – Shalan

+0

yep, «. \ Assets \ file.txt» будет ссылаться на папку с ресурсами по тому же пути, с которого выполняется ваш исполняемый файл. И до тех пор, пока ваши библиотеки DLL не нуждаются в регистрации и просто должны быть указаны в вашем приложении, тогда они будут работать нормально. Я считаю, что это называется развертыванием xcopy (из-за отсутствия лучшего термина). А что касается отсутствующих исполняемых файлов релиза, вы можете переключаться между отладкой и выпуском, нажав на (In visual studio) Build-> Configuration Manager ... и затем вы можете изменить конфигурацию Active solution. На стандартной панели инструментов также есть раскрывающийся список. – devSolo

+0

Thanx для помощи devSolo! Обязательно проверьте это. – Shalan

0

Для тех, кто заинтересован, то, что работал для меня, где я нужен ссылочный путь из исполняемого файла приложения, должен был использовать «Environment.GetCurrentDirectory»

Так, например, я представил путь к моей MS Word. точка шаблона, как:

Object templatePath = Environment.GetCurrentDirectory + "\\Assets\\MyDocument.dot"; 
+0

Пожалуйста, не делайте этого, это неверно в общем случае. –

Смежные вопросы