Installers
-
@dustbro
I Believe That The Installing Destination Is Limited To Only One :/
But The Trick Is To Create Two/2 Installers, One For 32 Bit And The Other One For 64 Bit.
I Seen So Many Companies Use This MethodBTW, I'll Send Them A Quote And Ask Them How To Make Multiple Paths
-
Do you guys really bother using serials as copy protection? This isn’t effective at all as far as I know or is it?
-
This isn’t effective at all as far as I know or is it?
It certainly doesn't prevent copying or "piracy".
-
Piracy is a good advertisment solution
-
I checked some traffic of developer sites and was surprised to see that approx 15% of the traffic comes from some shady sites and leads to PayPal :)
-
@clumsybear said in Installers:
Do you guys really bother using serials as copy protection? This isn’t effective at all as far as I know or is it?
We've had this conversation both here and in other forums so many times I lost count. The real-world answer to this is "Yes, it is effective..."
EVERYONE on the planet has an opinion about copy-protection and how its a waste of time - note thats OPINION, when you ask them about their experience its zero - they are not a developer and have never released a product.
We should be very wary of these opinion givers, it's a classic case of logic defeating experience, so if you are basing your view on logic in this instance not experience then you are wrong (in my experience). Here's why:if you have no copy protection the script-kiddies will upload your product to a warez site in the first 2 weeks - killing your initial(major) sales - with no perceived consequence to them
.
If you do have (even the simplest easily breakable) copy-protection this wont happen - and it will take a serious cracker several months to get to you(if they even bother) - ensuring your sales in those months stay strong.@clumsybear - I'm not saying you are one of these opinion givers by the way...just suggesting you be careful being influenced by them.
-
@Lindon I assume that a serial key in this instance acts as a watermark since there is nothing to prevent someone uploading the plugin along with their serial key?
-
I assume that a serial key in this instance acts as a watermark since there is nothing to prevent someone uploading the plugin along with their serial key?
Yup, same with the "Simple copy protection system done right" approach I posted a few months back.
Unless you're willing to hunt down people all across the world and go through a tedious lawsuit where you would have to really prove that it was this individual that was breaking your license agreement (good luck with that one), the only thing something like this does is to keep the "moderately criminal" user from uploading the product along with his serial.
I would say the minimum level of copy protection (and what we are using for our products) needs to limit the amount of systems that can load the software with a given serial number by identifier the machine ID and registering it to a serial with a arbitrary number of registration slots (eg. 5). From then on cracking your software requires the skill to reverse-engineer a binary and remove the safe checks, and normally once you get the attention of people with that skill set you're either super unlucky or have made enough money that you can dry your tears with dollar bills.
-
@Christoph-Hart said in Installers:
I would say the minimum level of copy protection (and what we are using for our products) needs to limit the amount of systems that can load the software with a given serial number by identifier the machine ID and registering it to a serial with a arbitrary number of registration slots (eg. 5).
Would that require some kind of "call home" to a server?
-
Yes once for the plugin-activation (or you can use a tedious offline authorisation procedure which involves shuffling around XML files across different computers if you're paranoid about letting internet on your music computer).
After the registration it won't call home (this would be really awful if you can't use the plugin without internet access).
-
@d-healey correct - thats all it is...
-
I have the ultimate copy restriction solution, GNU GPL ;) notice how no-one has "pirated" HISE. :p
-
@d-healey said in Installers:
I have the ultimate copy restriction solution, GNU GPL ;) notice how no-one has "pirated" HISE. :p
-- how would you know?
-
@Lindon Well you're allowed to copy and redistribute it so there is no copyright infringement (aka piracy). If someone took the HISE source code and used it in a proprietary app without permission that would be copyright infringement but would it be piracy?
-
Actually I found a installer of HISE 1.5.0 on some warez site a few months back :)
EDIT: Found it: https://www.wattpad.com/755629828-complete-new-hart-instruments-sampler-engine-hise
Disclaimer: if you click on it you'll be downloading a spurious .dmg which most likely will contain some nasty malware.
-
@Christoph-Hart Yeah but they're allowed to modify it and redistribute, even if the modification includes adding malware :P
-
But since they are not publishing the source code of the malware, it's a clear case of copy right infringement. GNU Lawyer team, please take over...
-
@Christoph-Hart Oh good point, but they only have to provide the source on request, have you requested it? lol that would be funny.
-
I need help with my installer.
I made feature list where we can select components to install but in next pages order is reversed.
Check list looks like
- 32 Plugin
- 64 Plugin
- Samples
and if I select everything to install next pages are in this order
- Samples
- 64 Plugin
- 32 Plugin
How can I keep the original order?
Here's my code
[Setup] #define AppName "My Plugin" #define DevDir "Developer" AppName={#AppName} AppPublisher={#DevDir} AppVersion=1.0.0 AppId={{C60E272E-F521C-491F-97A0-D61644CAACE3} DefaultDirName={pf}\{#DevDir}\{#AppName} DefaultGroupName={#AppName} Compression=lzma2 SolidCompression=yes OutputDir=.\installerbuild ArchitecturesInstallIn64BitMode=x64 OutputBaseFilename={#AppName} Installer 1.0.1 ;LicenseFile=".\installerAssets\EULA.txt" PrivilegesRequired=admin ;WizardSmallImageFile=".\installerAssets\Logo55x58.bmp" ;WizardImageFile=".\installerAssets\Logo164x314.bmp" DisableWelcomePage=no DisableDirPage=yes SetupLogging=yes ChangesAssociations=no [Types] Name: "full"; Description: "Full installation" Name: "custom"; Description: "Custom installation"; Flags: iscustom [Dirs] Name: "{app}\"; Permissions: users-modify powerusers-modify admins-modify system-modify [Components] Name: "vst2_32"; Description: "{#AppName} 32-bit VSTi Plugin"; Types: full custom; Name: "vst2_64"; Description: "{#AppName} 64-bit VSTi Plugin"; Types: full custom; Check: Is64BitInstallMode; Name: "samples"; Description: "{#AppName} Sample Set"; Types: full custom; [Files] ; VST Source: "Binaries\Compiled\VST\{#AppName} x86.txt"; DestDir: "{code:Get32Dir|0}\{#DevDir}"; Flags: ignoreversion; Components: vst2_32; Check: Source: "Binaries\Compiled\VST\{#AppName} x64.txt"; DestDir: "{code:Get64Dir|0}\{#DevDir}"; Flags: ignoreversion; Components: vst2_64; Check: Is64BitInstallMode ; SAMPLE FILE Source: "{#AppName}_1_0_0_Samples.hr1"; DestDir: "{code:GetSamplesDir|0}"; Flags: ignoreversion; Components: samples; [Icons] Name: "{group}\Uninstall {#AppName}"; Filename: "{app}\unins000.exe" [Code] var vst2_32: TInputDirWizardPage;function SkipEvent64 (Sender: TWizardPage): Boolean; begin Result := not IsComponentSelected('vst2_64'); end; var vst2_64: TInputDirWizardPage;function SkipEvent32 (Sender: TWizardPage): Boolean; begin Result := not IsComponentSelected('vst2_32'); end; var samples: TInputDirWizardPage;function SkipEventSamples (Sender: TWizardPage): Boolean; begin Result := not IsComponentSelected('samples'); end; function Get32Dir(Param: String): String; begin Result := vst2_32.Values[StrToInt(Param)]; end; function Get64Dir(Param: String): String; begin Result := vst2_64.Values[StrToInt(Param)]; end; function GetSamplesDir(Param: String): String; begin Result := samples.Values[StrToInt(Param)]; end; procedure InitializeWizard; begin vst2_32 := CreateInputDirPage(wpSelectComponents, 'Select a location', 'Where should the plug-in be installed?', 'Choose the place where you will install {#AppName} 32-bit. Its best to choose the folder where your other plugins are located. Click next to continue', False, 'vst2_32'); vst2_32.Add('Choose a place for {#AppName} 32-bit'); vst2_32.Values[0] := GetPreviousData('Directory1', ExpandConstant('{pf}\Steinberg\VSTPlugins\{#DevDir}\{#AppName} 32-bit')); vst2_32.OnShouldSkipPage := @SkipEvent32; vst2_64 := CreateInputDirPage(wpSelectComponents, 'Select a location', 'Where should the plug-in be installed?', 'Choose the place where you will install {#AppName} 64-bit. Its best to choose the folder where your other plugins are located. Click next to continue', False, 'vst2_64'); vst2_64.Add('Choose a place for {#AppName} 64-bit'); vst2_64.Values[0] := GetPreviousData('Directory2', ExpandConstant('{pf}\Steinberg\VSTPlugins\{#DevDir}\{#AppName} 64-bit')); vst2_64.OnShouldSkipPage := @SkipEvent64; samples := CreateInputDirPage(wpSelectComponents, 'Select a location', 'Where should the samples be installed?', 'Choose the place where you will install {#AppName} samples. Click next to continue', False, 'samples'); samples.Add('Choose a place for {#AppName} Samples'); samples.Values[0] := GetPreviousData('Directory3', ExpandConstant('{sd}\{#AppName} Samples')); samples.OnShouldSkipPage := @SkipEventSamples; end; procedure RegisterPreviousData(PreviousDataKey: Integer); begin SetPreviousData(PreviousDataKey, 'Directory1', vst2_32.Values[0]); SetPreviousData(PreviousDataKey, 'Directory2', vst2_64.Values[0]); SetPreviousData(PreviousDataKey, 'Directory3', samples.Values[0]); end;
-
Samples won't be part of your installer unless your instrument is tiny.