Как сделать установочный файл EXE

Как разработать операционную систему для компьютера. Операционные системы, составленные из сотен тысяч строк кода, позволяют пользователям взаимодействовать с компьютерной техникой. Они обычно пишутся на языках программирования C, C++ и…

View the guide!

C0N73MN's avatar
nnq2603's avatar
MassiveSleeper's avatar
MassiveSleeper's avatar
trespixeles's avatar
Hi, I need your help

I broke my head trying to change this area

Do you know how to edit this area?

Thank you Meow :3 
alioso's avatar
chloechantelle's avatar
alioso's avatar
chloechantelle

do you know where to learn the very basics ? and please how to make rounded corners 

chloechantelle's avatar

The guide has the basics.
Rounded corners isn’t possible on W10, as far as I’m aware.

alioso's avatar

The guide is not available anymore as of July 2018. There are things in the themes that I need to change for windows 10 but I cannot access them in Windows Style Builder. Like the taskbar and desktop right click menus and the start menu edits

chloechantelle's avatar

The guide is still accurate, and the Style Builder still works. You can’t change the taskbar color or start menu via Style Builder at all on W10, you need Classic Shell or alternative programs.

I don’t want to change the taskbar or start menu. All I want to do is remove the address bar or disable the breadcrumbs in file explorer but I don’t know how. You did it in your theme so I want to know how you did it.

chloechantelle's avatar

Both of those are very different requests, one is removing it all together and another is just hiding the breadcrumbs.

Follow the

Style Builder Guide

 to do either of those things.

Hi thank you for your version of the style builder guide. I have been having difficulty with my themes for a while because I was using the old windows 7 style builder guide which didn’t offer any of the settings for windows 10 context menus and things. This helped a lot but I have a problem I cannot fix.
My theme is a Dark Mac Theme and I have the fake mac buttons on the address bar. The problem is the breadcrumbs keep showing up and I don’t want them but I cannot remove them no matter what I do.

chloechantelle's avatar

The guide notes how to remove the breadcrumbs, if not there’s an option in Classic Shell Explorer Settings.

ispano's avatar

Job well done. Very handy.

chloechantelle's avatar
henrydns's avatar

cool work for regeneration!

SierraDesign's avatar

Thank you so much for this — I’ve been wanting to try my hand at Visual Styles for a long time, and I think you’ve made that a lot more accessible to me. I can’t thank you enough!

math0ne's avatar

Awesome work man, very helpful!

PoulNyrup's avatar

Thank you so much for this contribution.

:clap:

Metalbone1988's avatar

Thx Chloe! Really appreciate it

:D

WinDynamicDesktop — установка динамических обоев

Это бесплатная программа с открытым исходным кодом, благодаря которой пользователи Windows с лёгкостью смогут устанавливать динамические обои из macOS, которые меняются в зависимости от времени суток (к примеру, когда у вас за окном рассвет, на обоях тоже рассвет). Сразу же после запуска, приложение спрашивает ваше местоположение для того, чтобы узнать время восхода и заката солнца в вашем регионе, также его можно ввести вручную. После этого можно выбрать одну из многих тем, доступных по умолчанию, либо создать свою.

GitHub | Microsoft Store (бесплатно)

Системные требования

  • Операционная система: Mac OS или Windows x64.
  • Процессор: 1,0 GHz для Windows или 2,1 для Mac OS.
  • Видеокарта: 3D c 512 MB и поддержкой OpenGL 2.0 для Mac OS или 3.0 для Windows.
  • Оперативная память: от 4GB.

Свободное место на жестком диске: от 500 MB для установки самого редактора и около 200 MB для компонентов LayOut и Style Builder.

Внимание! Программа не поддерживает операционные системы семейства Linux и более старые версии Windows (XP, Vista).

Помимо SketchUp Pro 2017, вы также можете скачать более раннюю версию SketchUp Pro 17.1.174 и SketchUp Make 16.1. В чем их отличие, рассмотрим далее.

Шаги

  1. 1

    Для начала обучитесь программированию. Знание ассемблера необходимо; настоятельно рекомендуется также иметь понятие о других дополнительных языках программирования более низкого уровня, например, С.

  2. 2

    Определитесь, на какое устройство вы хотите загрузить операционную систему. Это может быть CD-диск, DVD-диск, устройство флэш-памяти, жесткий диск или другой компьютер.

  3. 3

    Решите, какой вы хотите видеть вашу операционную систему. Должна ли это быть полная версия ОС с графическим интерфейсом пользователя (GUI) или, может быть, что-нибудь более минималистичное? Вам необходимо знать, в каком направлении двигаться, еще перед началом процесса.

  4. 4

    Уточните, какую платформу процессора будет поддерживать ваша операционная система. AI-32 и x86_64 являются двумя наиболее распространенными версиями для персональных компьютеров, так что их можно считать наилучшим выбором.

  5. 5

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

  6. 6

    Выберите, собираетесь вы использовать свой собственный загрузчик или предварительно созданный унифицированный системный загрузчик Grand Unified Bootloader (GRUB). Поскольку кодирование своей собственной программы загрузки требует обширных знаний в области компьютерного обеспечения и BIOS, это может отодвинуть график программирования действующего ядра.

  7. 7

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

    Конечно, вполне возможно разработать ОС на таком языке, как Pascal или BASIC, но предпочтительнее писать на С или ассемблере. Ассемблер совершенно необходим, т. к. некоторые важные части операционной системы требуют знания именно этого языка. C++, с другой стороны, содержит ключевые слова, требуемые для запуска полной версии ОС.

    • Чтобы собрать ОС с помощью кодов C или C++, вы, конечно, будете использовать то один компилятор, то другой. Это означает, что вы должны прочесть руководство/инструкции/документацию для выбранного компилятора C/C++, что поставляется в комплекте с программным обеспечением или доступно на веб-сайте дистрибьютора. Вам придется узнать множество сложных вещей о компиляторе, кроме того, для совершенствования C++ предстоит изучить его схему и ABI. Вы, как ожидается, поймете различные форматы исполнительных задач (ELF, PE, COFF, обычные бинарные и т.д.) и заметите, что собственный формат Windows, PE (.exe) защищен авторским правом.
  8. 8

    Выберите интерфейс программирования приложений (API). Одной из подборок хорошего API является POSIX, так как она хорошо документирован. Все системы Unix имеют, по крайней мере, частичную поддержку POSIX, так что было бы тривиально пристраивать программы Unix на вашу операционную систему.

  9. 9

    Определитесь с дизайном. Существуют монолитные ядра и микроядра. Монолитные ядра выполняют все службы в ядре, в то время как микроядра имеют маленькое ядро в сочетании с пользовательской реализацией сервисов. В общем, монолитные ядра быстрее, но микроядра имеют лучшую изоляцию и защиту от возможных неисправностей.

  10. 10

    Рассмотрите вопрос о разработке и работе в команде. Таким образом, вам потребуется меньше времени на разрешение больших проблем, что позволит создать операционную систему лучшего качества за более короткие сроки.

  11. 11

    Не стирайте ваш жесткий диск полностью. Помните, форматирование диска необратимо очистит все ваши данные! Используйте GRUB или другой менеджер для дублированной загрузки вашего компьютера с другой ОС, пока ваша версия не будет полностью готова функционально.

  12. 12

    Начните с малого. Обратите внимание в первую очередь на мелочи, такие как отображение текста и прерывания, прежде чем переходить к сложным элементам, к примеру, к управлению памятью и многозадачности.

  13. 13

    Сохраняйте резервную копию последней рабочей версии. Это дает определенное спокойствие в случае, если что-то пойдет абсолютно неправильно в текущей версии вашей ОС или последующих дополнениях. В случае поломки вашего компьютера и невозможности загрузки, как вы и сами понимаете, отличной возможностью станет наличие второй копии для работы, так что вы сможете устранить имеющиеся неисправности.

  14. 14

    Протестируйте вашу новую операционную систему на виртуальной машине. Вместо перезагрузки компьютера каждый раз после внесения изменений или передачи файлов с рабочего компьютера тестовой машине вы можете использовать приложение для запуска ОС на виртуальной машине, в то время как ваша текущая ОС продолжает работать. Приложения VM включают в себя VMWare (которая также имеет сервер в свободном доступе), альтернативный открытый исходный код, Bochs, Microsoft Virtual PC (не совместим с Linux), а также XVM VirtualBox.

  15. 15

    Выпустите релиз-версию. Это позволит пользователям рассказать вам о возможных недостатках в вашей операционной системе.

  16. 16

    Операционная система также должна быть удобной для пользователя, так что не забудьте добавить полезные функции, которые станут неотъемлемой частью вашего дизайна.

ߣ

, ߣ — 0x100000 0xFF. , ӣ , — , ߣ . :

1) , , «» . , , BIOS , .

2) ӣ , ߣ . BIOS ACPI, .

, ߣ BIOS, .

ߣ 0x12. , AX . — 640 . , 640 , . ţ — ݣ , .

ߣ 640 . — 0x15 AH=0x88. AX ( 1 ) AX. 15 (15 + 1 16 ).

16 — 0x15, AX=0xE801. 4 :

AX — 16
BX — 16 64
CX- 16
DX — 16 64

«» BIOS , , AX BX , CX DX.

. ߣ 4 , , . BIOS ݣ — 0x15, AX=0xE820. , . :

EAX=0xE820
EDX=0x534D4150 («SMAP»)
EBX — ( 0)
ECX — ( 24 — )
ES:DI — ,

:

EAX=0x534D4150 («SMAP»)
EBX — . 0,
ECX — ݣ (20 24 )
.

( , ):

struct { unsigned long long base; // unsigned long long length; // unsigned long type; // unsigned long acpi_attrs; // ACPI}; 

. ݣ , . , ACPI, , . , ӣ ݣ , BIOS.

, , :

1 — . . , ӣ .
2 — (, BIOS). , . .
3 — ACPI. , . ACPI , . , 1.
4 — NVS . , , NVS :-)

BIOS . — , ţ . 0xE820. — ߣ . ߣ 32- 64- , ţ . 0x7000. , . 0 — BIOS .

; get_memory_map: mov di, 0x7000 xor ebx, ebx @: mov eax, 0xE820 mov edx, 0x534D4150 mov ecx, 24 mov dword[di + 20], 1 int 0x15 jc @f add di, 24 test ebx, ebx jnz @b @: cmp di, 0x7000 ja .ok mov dword[di], 0x100000 mov dword[di + 4], 0 mov dword[di + 12], 0 mov dword[di + 16], 1 mov dword[di + 20], 0 mov ax, 0xE801 int 0x15 jnc @f mov ah, 0x88 int 0x15 jc .ok mov cx, ax xor dx, dx @: test cx, cx jz @f mov ax, cx mov bx, dx @: movzx eax, ax movzx ebx, bx mov ecx, 1024 mul ecx push eax mov eax, ebx mov ecx, 65536 mul ecx pop edx add eax, edx mov [di + 8], eax add di, 24 jmp .ok .ok: xor ax, ax mov cx, 24 / 2 rep stosw ret

  32- . ģ .

; x86format Binary as «bin»org 0x7C00 jmp boot; ListFSalign 4fs_magic dd ?fs_version dd ?fs_flags dd ?fs_base dq ?fs_size dq ?fs_map_base dq ?fs_map_size dq ?fs_first_file dq ?fs_uid dq ?fs_block_size dd ?; virtual at 0x800f_info: f_name rb 256 f_next dq ? f_prev dq ? f_parent dq ? f_flags dq ? f_data dq ? f_size dq ? f_ctime dq ? f_mtime dq ? f_atime dq ?end virtual; label sector_per_track word at $$label head_count byte at $$ + 2label disk_id byte at $$ + 3reboot_msg db «Press any key…»,13,10,0boot_file_name db «boot.bin»,0; DS:SI write_str: push si mov ah, 0x0E @: lodsb test al, al jz @f int 0x10 jmp @b @: pop si ret; error: pop si call write_str; reboot: mov si, reboot_msg call write_str xor ah, ah int 0x16 jmp 0xFFFF:0; DX:AX ES:DIload_sector: push dx add ax, word[fs_base] adc dx, word[fs_base + 2] cmp byte[sector_per_track], 0xFF je .use_EDD push bx cx si div [sector_per_track] mov cl, dl inc cl div [head_count] mov dh, ah mov ch, al mov dl, [disk_id] mov bx, di mov al, 1 mov si, 3 @: mov ah, 2 int 0x13 jnc @f xor ah, ah int 0x13 dec si jnz @b .error: call error db «DISK ERROR»,13,10,0 @: pop si cx bx dx ret .use_EDD: push si mov byte[0x600], 0x10 mov byte[0x601], 0 mov word[0x602], 1 mov [0x604], di push es pop word[0x606] mov [0x608], ax mov [0x60A], dx mov word[0x60C], 0 mov word[0x60E], 0 mov ah, 0x42 mov dl, [disk_id] mov si, 0x600 int 0x13 jc .error pop si dx ret; DS:SI DX:AXfind_file: push cx dx di .find: cmp ax, -1 jne @f cmp dx, -1 jne @f .not_found: call error db «NOT FOUND»,13,10,0 @: mov di, f_info call load_sector push di mov cx, 0xFFFF xor al, al repne scasb neg cx dec cx pop di push si repe cmpsb pop si je .found mov ax, word[f_next] mov dx, word[f_next + 2] jmp .find .found: pop di dx cx ret; BX:0. AXload_file_data: push bx cx dx si di mov ax, word[f_data] mov dx, word[f_data + 2] .load_list: cmp ax, -1 jne @f cmp dx, -1 jne @f .file_end: pop di si dx cx mov ax, bx pop bx sub ax, bx shr ax, 9 — 4 ret @: mov di, 0x8000 / 16 call load_sector mov si, di mov cx, 512 / 8 — 1 .load_sector: lodsw mov dx, [si] add si, 6 cmp ax, -1 jne @f cmp dx, -1 je .file_end @: push es mov es, bx xor di, di call load_sector add bx, 0x200 / 16 pop es loop .load_sector lodsw mov dx, [si] jmp .load_list; boot: ; jmp 0:@f @: mov ax, cs mov ds, ax mov es, ax ; mov ss, ax mov sp, $$ ; sti ; mov [disk_id], dl ; mov ah, 0x41 mov bx, 0x55AA int 0x13 jc @f mov byte[sector_per_track], 0xFF jmp .disk_detected @: mov ah, 0x08 xor di, di push es int 0x13 pop es jc load_sector.error inc dh mov [head_count], dh and cx, 111111b mov [sector_per_track], cx .disk_detected: ; mov si, boot_file_name mov ax, word[fs_first_file] mov dx, word[fs_first_file + 2] call find_file mov bx, 0x7E00 / 16 call load_file_data ; jmp boot2; rb 510 — ($ — $$)db 0x55,0xAA; load_msg_preffix db «Loading ‘»,0load_msg_suffix db «‘…»,0ok_msg db «OK»,13,10,0config_file_name db «boot.cfg»,0start16_msg db «Starting 16 bit kernel…»,13,10,0start32_msg db «Starting 32 bit kernel…»,13,10,0label module_list at 0x6000label memory_map at 0x7000; DS:SI split_file_name: push si @: lodsb cmp al, «/» je @f test al, al jz @f jmp @b @: mov byte[si — 1], 0 mov ax, si pop si ret; DS:SI BX:0. AXload_file: push si mov si, load_msg_preffix call write_str pop si call write_str push si mov si, load_msg_suffix call write_str pop si push si bp mov dx, word[fs_first_file + 2] mov ax, word[fs_first_file] @: push ax call split_file_name mov bp, ax pop ax call find_file test byte[f_flags], 1 jz @f mov si, bp mov dx, word[f_data + 2] mov ax, word[f_data] jmp @b @: call load_file_data mov si, ok_msg call write_str pop bp si ret; get_memory_map: mov di, memory_map xor ebx, ebx @: mov eax, 0xE820 mov edx, 0x534D4150 mov ecx, 24 mov dword[di + 20], 1 int 0x15 jc @f add di, 24 test ebx, ebx jnz @b @: cmp di, 0x7000 ja .ok mov dword[di], 0x100000 mov dword[di + 4], 0 mov dword[di + 12], 0 mov dword[di + 16], 1 mov dword[di + 20], 0 mov ax, 0xE801 int 0x15 jnc @f mov ah, 0x88 int 0x15 jc .ok mov cx, ax xor dx, dx @: test cx, cx jz @f mov ax, cx mov bx, dx @: movzx eax, ax movzx ebx, bx mov ecx, 1024 mul ecx push eax mov eax, ebx mov ecx, 65536 mul ecx pop edx add eax, edx mov [di + 8], eax add di, 24 jmp .ok .ok: xor ax, ax mov cx, 24 / 2 rep stosw ret; boot2: ; mov si, config_file_name mov bx, 0x1000 / 16 call load_file ; mov bx, 0x9000 / 16 mov bp, module_list mov dx, 0x1000 .parse_line: mov si, dx .parse_char: lodsb test al, al jz .config_end cmp al, 10 je .run_command cmp al, 13 je .run_command jmp .parse_char .run_command: mov byte[si — 1], 0 xchg dx, si cmp byte[si], 0 je .parse_line ; cmp byte[si], «#» je .parse_line ; cmp byte[si], «L» je .load_file ; cmp byte[si], «S» je .start ; ; mov al, [si] mov [.cmd], al call error db «Unknown boot script command ‘» .cmd db ? db «‘!»,13,10,0 .config_end: ; ; jmp reboot; .load_file: push dx inc si call load_file push ax mov cx, 512 mul cx mov word[bp + 8], ax mov word[bp + 10], dx mov word[bp + 12], 0 mov word[bp + 14], 0 mov ax, bx mov cx, 16 mul cx mov word[bp], ax mov word[bp + 2], dx mov word[bp + 4], 0 mov word[bp + 6], 0 pop ax shr ax, 9 — 4 add bx, ax add bp, 16 pop dx jmp .parse_line; .start: ; , cmp bx, 0x9000 / 16 ja @f call error db «NO KERNEL LOADED»,13,10,0 @: ; xor ax, ax mov cx, 16 mov di, bp rep stosw ; inc si cmp word[si], «16» je .start16 cmp word[si], «32» je .start32 ;cmp word[si], «64» ;je .start64 ; call error db «Invalid start command argument»,13,10,0; 16- .start16: mov si, start16_msg mov bx, module_list mov dl, [disk_id] jmp 0x9000; 32- .start32: ; 32- mov si, start32_msg call write_str ; , i386 mov ax, 0x7202 push ax popf pushf pop bx cmp ax, bx je @f call error db «Required i386 or better»,13,10,0 @: ; call get_memory_map ; xor ax, ax mov cx, 3 * 4096 / 2 mov di, 0x1000 rep stosw ; mov word[0x1000], 0x2000 + 111b mov word[0x1FFC], 0x3000 + 111b ; mov eax, 11b mov cx, 0x100000 / 4096 mov di, 0x2000 @: stosd add eax, 0x1000 loop @b ; mov di, 0x3000 mov eax, dword[module_list] or eax, 11b mov ecx, dword[module_list + 8] shr ecx, 12 @: stosd add eax, 0x1000 loop @b mov word[0x3FF4], 0x4000 + 11b ; Kernel stack mov word[0x3FF8], 0x3000 + 11b ; Kernel page table ; CR3 mov eax, 0x1000 mov cr3, eax ; GDTR lgdt [gdtr32] ; cli ; ģ ݣ mov eax, cr0 or eax, 0x80000001 mov cr0, eax ; ģ 32- jmp 8:start32; 32- align 16gdt32: dq 0 ; NULL — 0 dq 0x00CF9A000000FFFF ; CODE — 8 dq 0x00CF92000000FFFF ; DATA — 16gdtr32: dw $ — gdt32 — 1 dd gdt32; 32- use32start32: ; mov eax, 16 mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax mov esp, 0xFFFFDFFC ; DL mov dl, [disk_id] ; EBX mov ebx, module_list ; ESI mov esi, memory_map ; jmp 0xFFC00000 

— startup.asm main.c. startup.asm , , ģ kernel_main. , startup.o , .

format ELFpublic _startextrn kernel_mainsection «.text» executable_start: movzx edx, dl push edx push esi push ebx lgdt [gdtr] call kernel_main @: ;cli ;hlt jmp @bsection «.data» writablegdt: dq 0 dq 0x00CF9A000000FFFF dq 0x00CF92000000FFFFgdtr: dw $ — gdt dd gdt

  Assembler :-). — kernel_main ţ . ţ . . GDTR — ģ .

— :

typedef struct { unsigned long long base; unsigned long long size;} BootModuleInfo;void kernel_main(char boot_disk_id, void *memory_map, BootModuleInfo *boot_module_list) { char *screen_buffer = (void*)0xB8000; char *msg = «Hello world!»; unsigned int i = 24 * 80; while (*msg) { screen_buffer[i * 2] = *msg; msg++; i++; }} 

— «Hello world!» . .

, — , . printf, strcpy, memcpy . . ģ , . ͣ libc, . , .

— , . ӣ . . , , . . . (, , ), . . , — ( PE ELF). 0xFFC00000. ӣ, ld:

OUTPUT_FORMAT(«binary»)ENTRY(_start)SECTIONS { .text 0xFFC00000 : { *(.text) *(.code) *(.rodata*) } .data ALIGN(0x1000) : { *(.data) } .bss ALIGN(0x1000) : { *(.bss) } .empty ALIGN(0x1000) — 1 : { BYTE(0) }} 

, 0xFFC00000. , read-only , , . 4 ( ). .empty , ( ). .

ӣ :

fasm startup.asm startup.ogcc -c -m32 -ffreestanding -o main.o main.cld —oformat=binary -melf_i386 -T script.ld -o kernel.bin startup.o main.o 

GCC -ffreestanding . , .

:

dd if=bin/boot.bios.bin of=bin/boot_sector.bin bs=512 count=1dd if=bin/boot.bios.bin of=disk/boot.bin bs=1 skip=512cp bin/kernel.bin disk/kernel.binbin/make_listfs of=disk.img bs=512 size=2880 boot=bin/boot_sector.bin src=./disk  

, bin , ݣ disk, boot.cfg :

# Loading kernelLkernel.bin# Boot 32 bit kernelS32 

ӣ , :

s_1342449337_2515581_92d6017bd6.png

  , , ݣ . , . , . , , . Assembler, startup.asm main.c, ֣ — ( ) .

Собственный инсталлятор

Разработка собственного программного обеспечения это одна задача, а установка его — это совсем другое. Как только Вы создали свой продукт, необходимо подумать о том, каким образом он будет предоставляться конечному пользователю. Если это просто один исполняемый файл, который вы можете просто заархивировать и выложить, то все просто. Но когда Ваш продукт состоит из нескольких файлов таких как, например, dll, которые необходимо зарегистрировать, Вам уже необходим инсталлятор. Даже если Вам просто необходимо создать пару ярлыков на компьютерах пользователей, то инсталлятор уже будет удобен, если Вы, конечно, не хотите, чтобы ваши пользователи делали все вручную.

Дорогой и коммерческий флагман InstallShield знаком всем, и Вы не раз пользовались инсталляторами, созданными этим продуктом. Но, он не является единственным оплотом для создания исталляторов. Существуют и достаточно способные бесплатные продукты, которые могут обеспечить Вас всеми необходимыми возможностями. Я выбрал несколько лучших из них. Они охватывают различные подходы к созданию инсталлятора: от быстрых и легко настраиваемых (5-10 минут и готово) до мощных и поддерживающих огромное количество настроек.

TaskbarX — кастомизация панели задач

TaskbarX позволяет настроить панель задач Windows 10, изменить её фон или центрировать иконки, а также скрывать трей, иконки и кнопку пуска на других мониторах. Программа очень быстрая и легковесная, а также не затрагивает реестр, что делает ее полностью безопасной.

GitHub (бесплатно) | Microsoft Store (1 доллар)

Советы

  • Когда разработка будет закончена, подумайте, хотите ли вы представить код в свободном доступе либо же установить частные права на него.
  • Обязательно сделайте функции безопасности вашим основным приоритетом, если хотите, чтобы ваша система была жизнеспособной.
  • Не начинайте проект разработки операционной системы с целью обучения программированию. Если вы не знаете C, C++, Pascal или какие-нибудь другие подходящие языки и свойства, в том числе типы указателя, операции с битами низкого уровня, переключение битов, встроенный ассемблер и т.д., – значит, еще не готовы для создания ОС.
  • Просматривайте такие порталы, как OSDev и OSDever, которые помогут вам улучшить собственную операционную систему. Обратите особое внимание на то, что по большинству вопросов сообщество OSDev.org предпочитает, чтобы вы самостоятельно обращались к содержанию сайта, а не присоединялись к форуму. Если вы все же решили примкнуть к рядам форумчан, для этого должны быть определенные предпосылки. Вы обязаны досконально знать C или C++ и язык x86 ассамблер. Вы также должны понимать общие и комплексные понятия в программировании, такие как Linked Lists, Queues и т.д. Сообщество OSDev в своих правилах прямо говорит о том, что никто не собирается нянчить новых программистов. Если вы пытаетесь разработать ОС, само собой разумеется, что вы «бог» в области программирования. От вас также требуется прочесть руководство по работе с процессором касательно его архитектуры, выбранной вами; например, x86 (Intel), ARM, MIPS, PPC и т.д. Такой справочник по структуре процессора можно легко найти с помощью поиска в Google («Intel Manuals», «ARM manuals» и т.д.). Не регистрируйтесь на форуме OSDev.org, чтобы задавать очевидные вопросы. Это просто приведет к ответам вроде «Read the f*** ing Manual». Для начала вы должны попробовать почитать Википедию, пособия для различных инструментов, которые собираетесь использовать.
  • Проверьте наличие потенциальных мертвых точек и других ошибок. Недочеты, тупики и другие проблемы могут повлиять на проект вашей операционной системы.
  • Если вы хотите способ попроще, представьте дистрибутивы Linux — типа Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd или SUSE Studio и SUSE KIWI. Тем не менее, создаваемая ОС принадлежит компании, которая первой представила этот сервис (хотя у вас есть права на ее свободное распространение, изменение и запуск, как вам нравится, под GPL).
  • Хорошим решением будет создание совершенно нового раздела для разрабатываемой операционной системы.

Установка

Чтобы начать знакомство с виртуальной машиной потребуется установить гипервизор. Таковых существует множество: платных и не очень, для тонкой настройки всего и вся или базового «нажал — заработало». Virtualbox — один из наиболее популярных гипервизоров, потому что бесплатный, доступен под Windows, Mac OS и Linux, активно развивается и поддерживается сообществом разработчиков и энтузиастов. Скачать VirtualBox можно с официального сайта, но учтите, он на английском.

Начиная с шестой версии в VirtualBox убрали поддержку 32-битных хост-систем, но пятая версия до сих пор доступна для скачивания. В любом случае, можно скачать обе версии. Для более комфортной работы потребуется еще и набор расширений — ExtensionPack.

Устанавливается VirtualBox довольно просто, достаточно последовательно соглашаться со всеми предложениями. Перед установкой появится большое предупреждение о том, что компьютер будет отключен от сети, на время установки виртуальных сетевых карт — это нормально. А в ходе установки появится несколько подтверждающих окон — это устанавливается эмулятор USB, сетевых карт и других устройств.

Ну а после установки появится основное окно гипервизора на родном русском языке.

Первым же делом желательно установить пакет расширений — он добавляет поддержку USB 2.0, подключение по протоколу RDP, поддержку накопителей с NVMe и прочие полезные вещи. В стандартной установке все эти возможности отсутствуют из-за различных лицензий: сам гипервизор бесплатный во все стороны, а расширения бесплатны только для личного пользования и ознакомления.

Чтобы установить расширения достаточно запустить файл Extensionpack дабл-кликом, но делать это нужно после установки самого Virtualbox — потому что установщик расширений запускается внутри гипервизора.

Какой метод подходит вам?

Если ваше программное обеспечение очень простое или вы собираетесь распространять его среди ограниченного числа людей, используйте метод 7-Zip. Это просто, быстро и практически не требует технических знаний.

Если ваше программное обеспечение несколько простое и вы хотите представить конечного пользователя настоящий мастер установки, воспользуйтесь методом IExpress.

Если у вас сложное программное обеспечение и у вас за плечами большой технический опыт, воспользуйтесь методом Inno Setup. Он самый гибкий, самый мощный и не страдает от проблем, которые мешают IExpress.

Какой метод вы будете использовать? Есть ли другие методы, которые мы пропустили? Дайте нам знать в комментариях ниже!

Изображение предоставлено: sdecoret, DaGa5 через Shutterstock.com

Как сделать установочный файл EXE Ссылка на основную публикацию

Как сделать установочный файл EXE
HelpExe

QuickLook — предпросмотр файлов без полного открытия

Это приложение позволяет выводить содержание файла на экран нажатием на пробел, прямо как в macOS. Таким образом можно быстро просматривать документы, фотографии и даже видео. С помощью Ctrl и колеса мыши можно увеличивать или уменьшать превью, а кликом на Enter откроется стандартное приложение для открытия данного типа файлов. Также твик поддерживает различные плагины для интеграции с другими файловыми менеджерами, либо открытия неподдерживаемых типов файлов.

GitHub | Microsoft Store (бесплатно)

Об этой статье

Эту страницу просматривали 64 340 раз.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: