download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Portable програми

Автор
Съобщение
electric_cc
Сря, 12.08.09, 08:27
Първо благодаря на wqwe за градивната критика относно PayDocs_portable. Един приятел беше ме помолил да му направя такъв вариант. Тествахме го на различни компютри и нямаше проблем. След забележките на wqwe инсталирахме на едно дискче за проби Windows 98 и разбрахме, че програмата е работила, защото на всички компютри е имало инсталиран офис пакет и ActiveX компонентите, които нашата програма ползва вече са регистрирани при инсталацията му. Иначе динамичните библиотеки, ако са в текущата или системната папка не се нуждаят от регистрация.
   Както не всеки израз е подходящ за логаритмуване, така и не всяка програма е подходяща за Portable вариант, особено, ако ползва някоя база данни.
   Все пак изход има. Тъй като DAO360.DLL е компонент, нуждаещ се от регистрация, решихме, че можем да го регистрираме от самата програма по следния начин: (примерът е на Visual Basic 6.0)

  Декларираме API функцията, която дава пътя до системната директория.
  Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

  Sub RegCompnent ()
         Dim a$
         Dim b$
         Dim sysdir As String ' тук се записва пътят до системната директория
         Dim slength As Long ' тук се записва дължината на пътя

         sysdir = Space(255)
         slength = GetSystemDirectory(sysdir, 255) ' чете дължината на пътя до системната директория
         sysdir = Left(sysdir, slength) ' извлича пътя до системната директория от буфера

         a$ = "dao360.dll"
         b$ = sysdir + "\" + a$
         If Exist(a$) Then ' Exist е наша функция за проверка съществуването на файла
                  FileCopy a$, B$ ' файлът се копира в системната директория
                  Shell "regsvr32 " + B$ > Null ' тук става самото регистриране, съобщенията на regsvr32 се скриват за да не тревожат потребителя
         End If
  End Sub

    По принцим може да се направи списък и всички компоненти да се регистрират по този начин.
    Необходимо е файловете да са записан на място, което да не е на флашката, защото, ако други програми ползват тези компоненти, то при изваждане на флашката те може да блокират.
    Този метод е тестван на Win98 и XP и работи перфектно. Дори и да се изтрие папката, това няма да се отрази на работата на компютъра.
    Предлагам тази тема на коментар, по простата причина, че може да е полезна за програмистите и освен това някой, който се е сблъсквал с тези проблеми може да акцентира за вероятни възможности за гафове.
    След анализите новата PayDocs_portable ще бъде публикувана в Download.bg.

phrozencrew
Сря, 12.08.09, 10:41
Интересно и полезно, electric_cc!
Хм, чудя се дали пък не може да се използва подобна техника с шела за регистриране на DLL-и от VBScript. А системната директория да се взима да речем:
Dim wshShell, wshExec, strResult
Set wshShell = CreateObject("WScript.Shell")
Set wshExec = wshShell.Exec("cmd /c echo %windir%\system32")
Do While Not(wshExec.StdOut.AtEndOfStream)
	strResult = wshExec.StdOut.ReadLine
Loop
WScript.Echo strResult

Предполагам, че на всички Windows версии системната директория винаги е %windir%\system32, или ...
И ако е така да се бучне и още един ред:
wshShell.Exec("cmd /c regsvr32 %windir%\system32\dll.dll")

Не съм го пробвал, но ако работи ще улесни много този скрипт на armenxxx1.

anonymous
Сря, 12.08.09, 10:53
Хмм преди време бях намерил начин с който не е нужно да се регистрира .dll файла а директно се посочва но сега не мога да си спомня точно как беше...
electric_cc
Сря, 12.08.09, 13:12

RE: Portable програми

” Хмм преди време бях намерил начин с който не е нужно да се регистрира .dll файла а директно се посочва но сега не мога да си спомня точно как беше... „
dao360.dll не е динамична библиотека, нищо че разширението му е dll и не може без регистрация, а специално във VB достатъчно е dll-ите да са в текущата папка.
phrozencrew, мисля, че това на Win98 няма да работи. Там системната директория е windows\system
anonymous
Пон, 17.08.09, 10:38

RE: Portable програми

” Може и да греша, но според мен силата на Portable програмата е в това, че тя може да се стартира дори на компютър без администраторски акаунт, където е забранено инсталирането.
Функцията:
Shell "regsvr32 " + B$ > Null '
няма да се изпълни на компютър без акаунт позволяващ инсталация на програми и промяна на системния регистър.
За това ми е любопитно какво е предимството на този начин на регистриране на библиотека пред стандартния начин, чрез изготвяне на инсталационен пакет. Предполагам се досещате, че при такава програма след изтриване на директорията, не се изтрива копирания, чрез сорс файл и не се възстановява предишното състояние на регистрите.
С други думи, моля ви разяснете по-подробно предимствата! „

...BoxedApp SDK

electric_cc
Вто, 18.08.09, 09:21
Даже и с инсталираща програма, ако нямате права не можете да инсталирате никаква програма, иначе цялата тази система с правата на системния администратор си губи смисъла. За да работи една Portable програма без да пипа в регистрите трябва всички процедури да са написани на езика, с който е разработена програмата или да включва такива на асемблер. Представете си да пишете процедури за достъп и обработка на файлове на Microsoft Access. По добре е да използвате готови неща и да ги регистрирате от самата програма по показания начин или да се опитвате да пишете директно в регистрите.
electric_cc
Нед, 23.08.09, 10:06

RE: Portable програми

” Може и да греша, но според мен силата на Portable програмата е в това, че тя може да се стартира дори на компютър без администраторски акаунт, където е забранено инсталирането.
Функцията:
Shell "regsvr32 " + B$ > Null '
няма да се изпълни на компютър без акаунт позволяващ инсталация на програми и промяна на системния регистър.
За това ми е любопитно какво е предимството на този начин на регистриране на библиотека пред стандартния начин, чрез изготвяне на инсталационен пакет. Предполагам се досещате, че при такава програма след изтриване на директорията, не се изтрива копирания, чрез сорс файл и не се възстановява предишното състояние на регистрите.
С други думи, моля ви разяснете по-подробно предимствата! „
    Като се използва BoxerAPP е най-елегантно, но кой Българин ще плати 300 евро за удоволствието да си направи Portable програмка?
    Стартирах тази процедура 20 пъти и се получиха 9 еднакви регистрации при Windows 98, затова трябва предварително при стартирането да се провери за всеки компонент дали вече не е бил регистриран, което не е никак сложно. След това всеки компонент, който се регистрира трябва да се запомни и преди излизането от програмата да се премахне регистрацията му, макар, че на никого не пречи да си остане. Това става с командата Shell "regsrv32 -u "+ b$ > Null (b$ е името на файла заедно с пътя до него)
    Единственото предимство е, че е достъпно за всеки програмист и не изисква средства. Иначе BoxerAPP се предлага за около 5000 евро, а най-евтиният вариант за единично ползване е 299 евро.
    Тази процедура може да се използва за създаване на собствен инсталатор на програми със звукови и екранни ефекти, с предложения за създаване на папки за инсталиране и други екстри по усмотрение на автора.
electric_cc
Пет, 25.09.09, 06:43
[/http://msdn.microsoft.com/en-us/magazine/cc188708.aspx] Ето какво казват Microsoft по дискутирания въпрос.
[/ http://download.microsoft.com/download/2/e/9/2e9bde04-3af1-4814-9f1e-733f732369a3/RegFreeCOM.exe ] Тук са дадени два примера, които илюстрират идеята.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.