Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Использование консольного компилятора .NET Framework для создания приложений

Возможно не все знают, что для создания небольшого приложения на VB.NET вполне достаточно самой инсталляции .NET Framework, т.к. она обеспечивает всё необходимое, включая компилятор. Иначе говоря, использование мощной и громоздкой интегрированной среды разработки Visual Studio от Microsoft является необходимостью далеко не всегда. Чтобы использовать описанную ниже методику, понадобится лишь простой текстовый редактор.

Иногда может быть полезно использовать небольшие приложения на .NET, чтобы заменить другие методы автоматизации, типа сценариев или пакетных файлов. Откомпилированная прикладная программа будет менее подвержена случайной модификации неквалифицированными пользователями и будет более защищена от любопытных глаз. Кроме того, библиотека классов .NET может предоставить возможности, которые отсутствуют в других средах автоматизации. Учитывая то, что .NET Framework становится всё более популярной, бесплатна и автоматически обновляется вместе с прочими компонентами Windows, использование такой методики становится довольно естественным и привлекательным для разработчика.

VBC компилятор - утилита командной строки, которая превратит ваш VB-код в исполняемый файл. Вы можете найти VBC компилятор по одному из этих путей:

%WINDIR%\Microsoft.NET\Framework\v1.1.4322\vbc.exe
%WINDIR%\Microsoft.NET\Framework\v2.0.50727\vbc.exe

Примечание: в этих же папках находится и компилятор jsc.exe, который позволит вам писать приложения на JScript.NET. Параметры запуска компиляторов вы можете получить, выполнив команды vbc /? и jsc /?.

Простейшее консольное приложение на VB.NET может выглядеть следующим образом:

Module Test
    Sub Main()
        Console.WriteLine("Hello, World!")
    End Sub
End Module

Или так:

Public Class Test
    Public Shared Sub Main()
        Console.WriteLine("Hello, World!")
    End Sub
End Class

Чтобы откомпилировать консольное приложение, выполните команду наподобие такой:

"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe" "c:\temp\test.vb" /out:"c:\temp\test.exe"

В данном случае исходный код (приведённый выше) содержится в текстовом файле test.vb, а исполняемый файл будет иметь имя test.exe. Поскольку исполняемый файл является консольным приложением, запускайте его из окна командного интерпретатора (иначе окно консоли будет захлопнуто прежде, чем вы успеете прочитать вывод программы).

Простейшее Windows-приложение на VB.NET может выглядеть следующим образом:

Module Test
    Sub Main()
        MsgBox("Hello, World!")
    End Sub
End Module

Или так:

Public Class Test
    Public Shared Sub Main()
        MsgBox("Hello, World!")
    End Sub
End Class

Чтобы откомпилировать Windows-приложение, выполните команду наподобие такой:

"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe" "c:\temp\test.vb" /out:"c:\temp\test.exe" /target:winexe

Некоторые продвинутые текстовые редакторы позволяют настроить компиляцию и запуск .NET приложений в полуавтоматическом режиме, предоставляя таким образом своего рода мини-среду разработки приложений .NET. К таким редакторам относится, например, PrimalScript, в котором можно легко настроить компиляцию .NET приложения по нажатию Ctrl+F7.

Кроме того, можно настроить компиляцию файлов .vb прямо из контекстного меню проводника. О том, как настраивается контекстное меню проводника, можно прочитать здесь. При этом команда в реестре может выглядеть примерно так:

cmd /k ""C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe" "%1" /out:"%1.exe""



Пример получения переданных параметров командной строки в консольном приложении:

Module Arguments
    Sub Main(ByVal Args() As String)
        Console.WriteLine("Передано параметров - " & args.Length().ToString() & ".")
        Dim Arg As String
        For Each Arg In Args
            Console.WriteLine(Arg)
        Next
    End Sub
End Module

Пример защиты от повторного запуска в Windows-приложении:

Module OneInstance
    Sub Main()
        ' Нахождение имени текущего процесса
        Dim ModuleName, ProcName As String
        ModuleName = System.Diagnostics.Process.GetCurrentProcess.MainModule.ModuleName
        ProcName = System.IO.Path.GetFileNameWithoutExtension(ModuleName)
        ' Получение всех процессов с таким же именем
        Dim Proc() As System.Diagnostics.Process
        Proc = System.Diagnostics.Process.GetProcessesByName(ProcName)
        If Proc.Length > 1 Then
            MsgBox("Такой процесс уже запущен!")
            Exit Sub
        Else
            MsgBox("Этот процесс запущен впервые!")
        End If
    End Sub
End Module

Пример вызова API-функции (приложение, осуществляющее выход пользователя; запускайте с осторожностью):

Module Shutdown
    Private Declare Function ExitWindowsEx Lib "user32" _
    (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    
    Private Enum ExitWindowsFlags
        Logoff = 0 'выход пользователя
        Shutdown = 1 'выключение системы
        Reboot = 2 'перезагрузка
        Force = 4 'принудительно
    End Enum
    
    Sub Main()
        ExitWindowsEx(ExitWindowsFlags.Logoff, 0&)
    End Sub
End Module

Пример использования COM-объекта:

Module Test
    Sub Main()
        Dim objCOM As Object
        objCOM = CreateObject("WScript.Shell")
        objCOM.Popup("Hello, World!")
    End Sub
End Module

Пример работы с WMI:

Module TestWMI
    Sub Main()
        Dim objService As Object
        objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
        Dim objOS As Object
        For Each objOS In objService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
            MsgBox(objOS.Caption & vbCrLf & objOS.Version & vbCrLf & _
                objOS.CSDVersion & vbCrLf & objOS.Locale & vbCrLf & objOS.SerialNumber)
        Next
    End Sub
End Module

Пример создания графического интерфейса:

Imports System.Windows.Forms
Public Class WinForm
    Inherits System.Windows.Forms.Form
    Private b As New Button()
    Public Sub New()
        MyBase.New()
        MyBase.Topmost = True
        MyBase.Text = "Кнопка с текущим временем"
        b.Dock = DockStyle.Fill
        b.Text = Now()
        AddHandler b.Click, AddressOf b_Click
        MyBase.Controls.Add(b)
        MyBase.Show()
    End Sub
    Public Sub b_Click(ByVal sender As Object, ByVal e As EventArgs)
        b.Text = Now()
    End Sub
    Public Shared Sub Main()
        System.Windows.Forms.Application.Run(New WinForm())
    End Sub
End Class

Людоговский Александр

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.