Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];




Вниз

Посоветуйте как лучше поступить. 


DVM ©   (2009-10-24 14:16) [0]

Мне надо сделать сделать порядка 20 билдов одной и тоже программы, различающихся лишь тем, что в одном из модулей будет прошита разная константа у всех. Ну типа серийного номера, но не серийный номер, используется не для защиты, а скорее для информационных целей. Константа потом будет использована в программе.

Билдить все руками неохота, потом лучше день потерять зато потом за час долететь.

Как такое лучше провернуть? Как бы вы поступили? Для меня предпочтительнее компилировать бат файлом, вопрос в том как лучше менять значение константы, в остальном все понятно.



Упс   (2009-10-24 14:24) [1]

В файле настроек?



Riply ©   (2009-10-24 14:26) [2]

> [0] DVM ©   (24.10.09 14:16)
> Билдить все руками неохота, потом лучше день потерять зато потом за час долететь.

> Как такое лучше провернуть? Как бы вы поступили?
> Для меня предпочтительнее компилировать бат файлом, вопрос в том как лучше менять значение константы, в остальном все понятно.

Добавить DEFINE в командну строку ?



Pavia ©   (2009-10-24 14:27) [3]

Инклюдишь файл со своей константой. Через "copy con" меняешь константу.



Суслик_   (2009-10-24 14:45) [4]


> Pavia ©   (24.10.09 14:27) [3]
>
> Инклюдишь файл со своей константой. Через "copy con" меняешь
> константу.

+1

я так и дела.

если константа числовая, то можно в бинарнике править. надо только придумать, как найти место. можно db инструкции использовать.



DVM ©   (2009-10-24 14:48) [5]


> Упс   (24.10.09 14:24) [1]


> В файле настроек?

В файле настроек чего? Моей программы? Если так, этот вариант отпадает. Этой константе незачем быть "на виду".


> Riply ©   (24.10.09 14:26) [2]


> Добавить DEFINE в командну строку ?

О таком варианте уже думал, просто хотел узнать про альтернативы.


> Pavia ©   (24.10.09 14:27) [3]


> Инклюдишь файл со своей константой. Через "copy con" меняешь
> константу.

Этот вариант тоже второй который пришел в голову.

Хорошо спасибо, собственно как я и хотел либо возьму [2] либо [3]



Дмитрий Белькевич   (2009-10-24 14:59) [6]

Как мы делаем, в батнике: dcc32.exe any.dpr -B -DCOPY%1

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

for /L %%i IN (1,1,3) DO call BuildPackage.bat %%i

В самом проекте - скопипащенные дефайны.



DVM ©   (2009-10-24 15:01) [7]


> Дмитрий Белькевич   (24.10.09 14:59) [6]

Спасибо



XXL   (2009-10-24 15:02) [8]

... и даже fc /b элементарно выявит различия между билдами :)



DVM ©   (2009-10-24 15:05) [9]


> XXL   (24.10.09 15:02) [8]


> ... и даже fc /b элементарно выявит различия между билдами
> :)

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



Суслик_   (2009-10-24 17:41) [10]

у VmProtect есть т.н. водяные знаки - заносит в программу уникальные коды, которые в общем случае трудно вычистить. В результате по бинарнику можно понять владельца.



Омлет ©   (2009-10-24 21:24) [11]

Имеется скрипт StringReplaceInFile.vbs

On Error Resume Next
fileName = WScript.arguments(0)
patrn = WScript.arguments(1)
replStr = WScript.arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
LogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)

replaceTextInFile fileName, patrn, replStr

Function replaceTextInFile(FilePath, patrn, replStr)
   On Error Resume Next
   Set TFile = objFSO.OpenTextFile(FilePath, 1)
   fileText = TFile.ReadAll
   fileText = ReplaceTest(fileText, patrn, replStr)
   Set WFile = objFSO.OpenTextFile(FilePath, 2)
   WFile.WriteLine fileText
   WFile.Close
End Function

Function ReplaceTest(src_str, patrn, replStr)
   Dim regEx
   Set regEx = New RegExp
   regEx.Pattern = patrn
   regEx.Global = False
   regEx.IgnoreCase = True
   ReplaceTest = regEx.Replace(src_str, replStr)
End Function


Он вызывается из батника с передачей параметров: путь до файла, в котором заменять; текст, который заменяем; текст, на который заменяем.
Я брал файл-шаблон, где на нужном месте было что-то вроде %PARAM_X%, копировал его в нужную папку, заменял в нем %PARAM_X% на необходимый текст и компилировал.
И накаких проблем.



Омлет ©   (2009-10-24 21:30) [12]

objShellApp и LogPath по ходу не нужны, при последней правке забыл убрать.




Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.023 c
1-1231824463      inferno               2009-01-13 08:27  2009.12.27  
Передать параметром процедуре указатель на массив


2-1257779059      Jaroslight            2009-11-09 18:04  2009.12.27  
Среднее значение показателей типа TTime


11-1192910949     Dodfr                 2007-10-21 00:09  2009.12.27  
ExptIntf.dcu not found


1-1231156348      Илья_                 2009-01-05 14:52  2009.12.27  
Вывод символов Unicode


2-1257922755      stas                  2009-11-11 09:59  2009.12.27  
TWEBBrowser скрыть ошибки