средствами Visual Studio NET собрать прогу со всеми ресурсами

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Гость
#1
Можно ли средствами Visual Studio NET собрать прогу со всеми ресурсами и "хламом" в единый *.exe? Я, конечно, не инсталяцию имею ввиду а сокрытие "хлама". Может кто утилитки порекомендует?
 
D

Dr.Gigabit

Гость
#2
А можно подробнее, что бы подразумеваете под "хламом"? Не совсем понятно...
И что значит, "собрать прогу"? Есть некий Solution, состоящий из Project'ов... А проблема в чем-то?
 
G

Guest_

Гость
#3
Подробнее: ну программа во время работы обращается к некоторым изображениям, 3D-моделям, звукам *.wav и др. Скажем, выводит в определённый момент заставочку *.bmp. Для того, чтобы скрыть эти ресурсы от праздного любопытства пользователя собирают их вместе с основной прогой в единый исполнимый файл или пакуют ресурсы в архивы, доступные основной проге, например, знаменитые игровые архивы. В результате проект имеет товарный вид, а главное - защищён. Как же это осуществить?
 
S

starteg

Гость
#4
проще просто не бывает

создаешь класс
забиваешь туда по байтам или строками свою bmp и потом рисуешь ее из него тоже по байтикам или строками, можно для уверенности строки перемежевать с каким нибудь нужным для тебя текстом или звуком, только при выводе алгоритм шифровки соблюсти :D


пихаешь все в коллекцию предварительно закрыв простейшим шифром
например а=1 б=2 с=3 и т.д. перепаковываешь для верности архиватором достаешь дешифруешь .......


есть много самых разных вариантов
 
N

Nyxbull

Гость
#5
Проще простого.. На примере картинки:

1. Добавляешь картинку в проект
2. в свойствах в Build Action ставишь Embedded Resource
3. В программе пишешь следующий код:

System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();

Stream myStream;

myStream = myAssembly.GetManifestResourceStream("имя_Namespace.картинка.gif");
Bitmap pic1 = new Bitmap(myStream);
myStream.Close();

Собственно, все.. в pic1 твоя картинка..
Точно так же со всеми остальными ресурсами..
 
L

Leonopulos

Гость
#6
Для: Nyxbull
Я именно так и делаю, но при дебаге студия (VS2005) выкидывает эксепшен NullReferenceException на строчке Bitmap pic1 = new Bitmap(myStream); т.е. myStream=null.
пытаюсь ресурс в Command Line ассемблировать через /res: или /resource: - пишет Command was not specified.

не понимаю.
памажите, плиз.

ЗЫ. Может это быть из-за того, что сервис пак не установлен?
 
P

Pasha

Гость
#7
Для: Leonopulos
Embedded Resource для картинки выставил?
Что передаешь как параметр в GetManifestResourceStream? Должно быть "Namespace.Filename.gif". Если угадать не получается - вызови в дебаге Assembly.GetExecutingAssembly().GetManifestResourceNames(); и посмотри список ресурсов.

Это 100% не из за сервис пака. до него же люди как-то ресурсами пользовались...
 
L

Leonopulos

Гость
#8
Для: Pasha

<!--QuoteBegin-Pasha+2:03:2007, 15:05 -->
<span class="vbquote">(Pasha @ 2:03:2007, 15:05 )</span><!--QuoteEBegin-->Embedded Resource для картинки выставил?
[snapback]57951" rel="nofollow" target="_blank[/snapback]​
[/quote]
Обязательно.
Делаю всё, как в хелпе.
<!--QuoteBegin-Pasha+2:03:2007, 15:05 -->
<span class="vbquote">(Pasha @ 2:03:2007, 15:05 )</span><!--QuoteEBegin-->Assembly.GetExecutingAssembly().GetManifestResourceNames();
[snapback]57951" rel="nofollow" target="_blank[/snapback]​
[/quote]
гляну, спасибо.

меня смущает, почему я не могу /res: воспользоваться?
 
L

Leonopulos

Гость
#10
Для: Pasha
Assembly.GetExecutingAssembly().GetManifestResourceNames(); помог.
в ресурсах объект оказывается прописывется как "namespace.Resource.filename".
 
P

Pasha

Гость
#11
Для: Leonopulos
Прописывается как root_namespace.relative_path.filename
 
L

Leonopulos

Гость
#12
Для: Pasha
А можно ещё вопрос?
Теперь с палитрой разобраться не могу.
Почему-то весь курсор закрашивается в чёрный цвет.
Хотя он исходный файл цветной.
 
P

Pasha

Гость
#13
Для: Leonopulos
Выложи код, которым его загружаешь.
 
L

Leonopulos

Гость
#14
this.panel1.BackColor = System.Drawing.Color.Transparent;
string[] names = Assembly.GetExecutingAssembly().GetManifestResourceNames();
Assembly asm = Assembly.GetExecutingAssembly();
Stream str = asm.GetManifestResourceStream("myNamespace.Resources.myCursor.cur");

всё, а принципе, просто.
я это делаю прямо в дизайнере. (Form1.Designer.cs)
 
Статус
Закрыто для дальнейших ответов.