<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: программное создание *.iso образа компакт-диска посредством IMAPI]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=4456</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=4456&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: программное создание *.iso образа компакт-диска посредством IMAPI».]]></description>
		<lastBuildDate>Mon, 10 May 2010 02:11:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBS: программное создание *.iso образа компакт-диска посредством IMAPI]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=35511#p35511</link>
			<description><![CDATA[<div class="codebox"><pre><code>Option Explicit

&#039; *** Enum FsiFileSystems ***
Const FsiFileSystemNone    = 0
Const FsiFileSystemISO9660 = 1
Const FsiFileSystemJoliet  = 2
Const FsiFileSystemUDF     = 4
Const FsiFileSystemUnknown = 1073741824

&#039; *** Enum IMAPI_MEDIA_PHYSICAL_TYPE ***
Const IMAPI_MEDIA_TYPE_UNKNOWN             =  0
Const IMAPI_MEDIA_TYPE_CDROM               =  1
Const IMAPI_MEDIA_TYPE_CDR                 =  2
Const IMAPI_MEDIA_TYPE_CDRW                =  3
Const IMAPI_MEDIA_TYPE_DVDROM              =  4
Const IMAPI_MEDIA_TYPE_DVDRAM              =  5
Const IMAPI_MEDIA_TYPE_DVDPLUSR            =  6
Const IMAPI_MEDIA_TYPE_DVDPLUSRW           =  7
Const IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER  =  8
Const IMAPI_MEDIA_TYPE_DVDDASHR            =  9
Const IMAPI_MEDIA_TYPE_DVDDASHRW           = 10
Const IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER  = 11
Const IMAPI_MEDIA_TYPE_DISK                = 12
Const IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER = 13
Const IMAPI_MEDIA_TYPE_HDDVDROM            = 14
Const IMAPI_MEDIA_TYPE_HDDVDR              = 15
Const IMAPI_MEDIA_TYPE_HDDVDRAM            = 16
Const IMAPI_MEDIA_TYPE_BDROM               = 17
Const IMAPI_MEDIA_TYPE_BDR                 = 18
Const IMAPI_MEDIA_TYPE_BDRE                = 19
Const IMAPI_MEDIA_TYPE_MAX                 = 19

&#039; *** Enum PlatformId ***
Const PlatformX86     = 0
Const PlatformPowerPC = 1
Const PlatformMac     = 2
Const PlatformEFI     = 239

&#039; *** Enum EmulationType ***
Const EmulationNone       = 0
Const Emulation12MFloppy  = 1
Const Emulation144MFloppy = 2
Const Emulation288MFloppy = 3
Const EmulationHardDisk   = 4

Const adFileTypeBinary = 1


Dim strBaseFolder
Dim strSourceFolder
Dim strISOImagePath
Dim strBootImage
Dim strISOVolumeName

Dim objBootOptions
Dim objFileSystemImageResult
Dim objStream
Dim objSFStream

Dim lngImageSize
Dim lngWrittenBytes


strBaseFolder    = &quot;C:\Мои проекты\Малый джентльменский набор&quot;
strSourceFolder  = strBaseFolder &amp; &quot;\Codecs&quot;
strISOImagePath  = strBaseFolder &amp; &quot;\Out\DBL 4.28.iso&quot;
strBootImage     = strBaseFolder &amp; &quot;\bcdwboot.bin&quot;
strISOVolumeName = &quot;DBL 4.28&quot;

&#039; Создаём новый образ файловой системы диска
With WScript.CreateObject(&quot;IMAPI2FS.MsftFileSystemImage&quot;)
    &#039;---------------------------------------------------------------------------
    &#039; Задаём тип файловой системы и размер образа
    .ChooseImageDefaultsForMediaType IMAPI_MEDIA_TYPE_DISK
    .FileSystemsToCreate = FsiFileSystemISO9660 + FsiFileSystemJoliet
    
    &#039;---------------------------------------------------------------------------
    &#039; Задаём имя образа
    .VolumeName = strISOVolumeName
    
    &#039;---------------------------------------------------------------------------
    &#039; Задаём загрузчик
    Set objBootOptions = WScript.CreateObject(&quot;IMAPI2FS.BootOptions&quot;)
    
    With objBootOptions
        .Manufacturer = &quot;Microsoft&quot;
        .PlatformId   = PlatformX86
        .Emulation    = EmulationNone
    End With
    
    &#039; Загружаем загрузчик из файла в образ с помощью вспомогательного потока — 
    &#039; объекта «ADODB.Stream»
    Set objStream = CreateObject(&quot;ADODB.Stream&quot;)
    
    With objStream
        .Type = adFileTypeBinary
        .Open
        
        .LoadFromFile strBootImage
    End With
    
    objBootOptions.AssignBootImage objStream
    .BootImageOptions = objBootOptions
    
    &#039;---------------------------------------------------------------------------
    &#039; Теперь танцуем от корневого каталога образа
    With .Root
        &#039;---------------------------------------------------------------------------
        &#039; Самое простое — добавляем в корневой каталог папку со всем содержимым
        .AddTree strSourceFolder, True
        
        &#039;---------------------------------------------------------------------------
        &#039; Почти то же самое, но добавляем в корневой каталог только содержимое папки,
        &#039; без неё самой
        .AddTree strBaseFolder &amp; &quot;\OtherRoot&quot;, False
        
        &#039;---------------------------------------------------------------------------
        &#039; Просто создаём «ручками» папку в корневом каталоге образа
        .AddDirectory &quot;Files for testing&quot;
        
        &#039;---------------------------------------------------------------------------
        &#039; Добавляем файл в корневой каталог
        &#039;
        &#039; Сначала получаем содержимое файла…
        objStream.LoadFromFile strBaseFolder &amp; &quot;\autorun.inf&quot;
        
        &#039; …затем добавляем его под заданным именем
        .AddFile &quot;autorun.inf&quot;, objStream
        
        &#039;---------------------------------------------------------------------------
        &#039; Добавляем файл в произвольную существующую(!) папку образа,
        &#039; например, в созданную выше «Files for testing»
        &#039;
        &#039; Как и ранее, сначала получаем содержимое файла…
        objStream.LoadFromFile strBaseFolder &amp; &quot;\DBL.ico&quot;
        
        &#039; …затем добавляем его под заданным именем (причём, не обязательно
        &#039; под тем же именем)
        .AddFile &quot;Files for testing\My.ico&quot;, objStream
    End With
    
    &#039; Закрываем и очищаем вспомогательный поток
    objStream.Close
    Set objStream = Nothing
    &#039;---------------------------------------------------------------------------
    &#039; Создаём результирующий образ и подстыковываемся к нему объектом «newObjects.utilctls.SFStream»
    &#039; из библиотеки «newObjects ActiveX Pack1» (http://www.newobjects.com),
    &#039; дабы записать образ в виде ISO на жёсткий диск
    Set objSFStream = WScript.CreateObject(&quot;newObjects.utilctls.SFStream&quot;)
    objSFStream.SetStream .CreateResultImage().ImageStream
End With

&#039; Создаём выходной файл
With WScript.CreateObject(&quot;newObjects.utilctls.SFMain&quot;).CreateFile(strISOImagePath)
    &#039; Получаем размер образа
    lngImageSize    = objSFStream.Size
    &#039; Пишем образ на жёсткий диск и получаем количество записанных байт
    lngWrittenBytes = .WriteBin(objSFStream.ReadBin(lngImageSize))
    
    &#039; Закрываем созданный поток
    .Close
End With

Set objSFStream    = Nothing
Set objBootOptions = Nothing

WScript.Echo &quot;ISO image name:&quot;, strISOVolumeName
WScript.Echo &quot;ISO file path :&quot;, strISOImagePath
WScript.Echo &quot;ISO image size:&quot;, FormatNumber(lngImageSize, 0), &quot;b&quot;
WScript.Echo &quot;Written bytes :&quot;, FormatNumber(lngWrittenBytes, 0), &quot;b&quot;

WScript.Quit 0</code></pre></div><p>Примерный результат:<br /></p><div class="quotebox"><blockquote><div class="codebox"><pre><code>ISO image name: DBL 4.28
ISO file path : C:\Мои проекты\Малый джентльменский набор\Out\DBL 4.28.iso
ISO image size: 65,327,104 b
Written bytes : 65,327,104 b</code></pre></div></blockquote></div><p>Отдельное спасибо <strong>BeS Yara</strong>.</p><p><strong><em>Ссылки:</em></strong><br />* источники: <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsopticalplatform/thread/eb034c50-7ada-485b-9669-cb5665ed5095">Creating ISO files with vbscript possible???</a> и <a href="http://social.msdn.microsoft.com/Forums/en/windowsopticalplatform/thread/92a8337e-34e2-4696-9dcd-900910d88178">Writing an ISO image to disc</a>;<br />* IMAPI SDK: <a href="http://msdn.microsoft.com/en-us/library/aa366450.aspx">Image Mastering API (Windows)</a> и примеры сценариев: <a href="http://msdn.microsoft.com/en-us/library/aa366454(v=VS.85).aspx">Using IMAPI (Windows)</a>;<br />* библиотека <a href="http://www.newobjects.com/product.asp?ID=63">newObjects ActiveX Pack1 (AXPack1)</a>.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 10 May 2010 02:11:52 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=35511#p35511</guid>
		</item>
	</channel>
</rss>
