Merge pull request #217 from Cossey/develop

Port Windows to .NET 5 and create new installer and package.
This commit is contained in:
Shreyas Zare
2021-03-06 18:08:28 +05:30
committed by GitHub
58 changed files with 2595 additions and 493 deletions

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

View File

@@ -1,48 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2F91BD07-2CEE-47FA-8486-457B54612B4C}</ProjectGuid>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<RootNamespace>DnsServerSystemTrayApp</RootNamespace>
<AssemblyName>DnsServerSystemTrayApp</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<Authors>Shreyas Zare</Authors>
<ApplicationIcon>logo2.ico</ApplicationIcon>
<Version>2.0.0.0</Version>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Windows.Forms" />
<Reference Include="TechnitiumLibrary.IO, Version=2.5.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\TechnitiumLibrary\bin\TechnitiumLibrary.IO.dll</HintPath>
@@ -52,45 +21,16 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="DnsProvider.cs" />
<Compile Include="frmAbout.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmAbout.Designer.cs">
<DependentUpon>frmAbout.cs</DependentUpon>
</Compile>
<Compile Include="frmManageDnsProviders.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmManageDnsProviders.Designer.cs">
<DependentUpon>frmManageDnsProviders.cs</DependentUpon>
</Compile>
<Compile Include="NotifyIconExtension.cs" />
<Compile Include="MainApplicationContext.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmAbout.resx">
<DependentUpon>frmAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmManageDnsProviders.resx">
<DependentUpon>frmManageDnsProviders.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<Compile Update="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="App.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<Compile Update="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
@@ -99,5 +39,8 @@
<ItemGroup>
<Content Include="logo2.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<PackageReference Include="System.Management" Version="5.0.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="5.0.0" />
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Technitium DNS Server")]
[assembly: AssemblyDescription("Technitium DNS Server")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Technitium")]
[assembly: AssemblyProduct("Technitium DNS Server")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("2f91bd07-2cee-47fa-8486-457b54612b4c")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.2.0")]
[assembly: AssemblyFileVersion("1.3.2.0")]

View File

@@ -34,10 +34,25 @@ namespace DnsService
protected override void OnStart(string[] args)
{
_service = new WebService(null, new Uri("https://go.technitium.com/?id=22"));
_service = new WebService(getConfigFolder(), new Uri("https://go.technitium.com/?id=22"));
_service.Start();
}
/// <summary>
/// If the service file path has the configuration files, use it, otherwise use the localapppath folder.
/// </summary>
/// <returns>The configuration path.</returns>
private string getConfigFolder()
{
string userConfigFolder = String.Concat(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"\Technitium\DNSServer");
if (System.IO.Directory.Exists(Environment.CurrentDirectory))
{
return Environment.CurrentDirectory;
}
return userConfigFolder;
}
protected override void OnStop()
{
_service.Dispose();

View File

@@ -1,83 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7873B2B8-01BA-48BC-B4B0-0857FFD873C9}</ProjectGuid>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows7.0</TargetFramework>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<RootNamespace>DnsService</RootNamespace>
<AssemblyName>DnsService</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>logo2.ico</ApplicationIcon>
<Version>2.6.0.0</Version>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.ServiceProcess" />
<Reference Include="TechnitiumLibrary.Net.Firewall">
<HintPath>..\..\TechnitiumLibrary\bin\TechnitiumLibrary.Net.Firewall.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="ProjectInstaller.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ProjectInstaller.Designer.cs">
<DependentUpon>ProjectInstaller.cs</DependentUpon>
</Compile>
<Compile Include="DnsService.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="DnsService.Designer.cs">
<DependentUpon>DnsService.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ProjectInstaller.resx">
<DependentUpon>ProjectInstaller.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DnsService.resx">
<DependentUpon>DnsService.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="logo2.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DnsServerCore\DnsServerCore.csproj">
<Project>{4494b79b-588c-41f2-95ad-0897123af154}</Project>
<Name>DnsServerCore</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.ServiceProcess.ServiceController" Version="5.0.0" />
</ItemGroup>
</Project>

View File

@@ -1,60 +0,0 @@
namespace DnsService
{
partial class ProjectInstaller
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
//
// serviceInstaller1
//
this.serviceInstaller1.Description = "Technitium DNS Server";
this.serviceInstaller1.DisplayName = "Technitium DNS Server";
this.serviceInstaller1.ServiceName = "DnsService";
this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1,
this.serviceInstaller1});
}
#endregion
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
}
}

View File

@@ -1,90 +0,0 @@
/*
Technitium Library
Copyright (C) 2018 Shreyas Zare (shreyas@technitium.com)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace DnsService
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
protected override void OnBeforeInstall(IDictionary savedState)
{
try
{
foreach (ServiceController sc in ServiceController.GetServices())
{
if (sc.ServiceName == serviceInstaller1.ServiceName)
{
//found previously installed service
//stop service
if (sc.Status == ServiceControllerStatus.Running)
sc.Stop();
//uninstall service
using (ServiceInstaller si = new ServiceInstaller())
{
si.Context = new InstallContext();
si.ServiceName = serviceInstaller1.ServiceName;
si.Uninstall(null);
}
break;
}
}
}
catch
{ }
}
protected override void OnAfterInstall(IDictionary savedState)
{
try
{
using (ServiceController sc = new ServiceController(serviceInstaller1.ServiceName))
{
sc.Start();
}
}
catch
{ }
}
protected override void OnBeforeUninstall(IDictionary savedState)
{
try
{
using (ServiceController sc = new ServiceController(serviceInstaller1.ServiceName))
{
sc.Stop();
}
}
catch
{ }
}
}
}

View File

@@ -1,129 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="serviceProcessInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 56</value>
</metadata>
<metadata name="serviceInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>196, 17</value>
</metadata>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Technitium DNS Server")]
[assembly: AssemblyDescription("Technitium DNS Server")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Technitium")]
[assembly: AssemblyProduct("Technitium DNS Server")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("7873b2b8-01ba-48bc-b4b0-0857ffd873c9")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.6.0.0")]
[assembly: AssemblyFileVersion("5.6.0.0")]

View File

@@ -0,0 +1 @@
I am the package maintainer AND the software developer for Technitium DNS Server.

View File

@@ -0,0 +1,70 @@
$buildfolder = "build/"
$installerfilename = "dnsserverinstall"
Write-Host "DNS Server Chocolatey Package Builder"
Write-Host "-------------------------------------"
Write-Host "Create build folders..."
New-Item -ItemType Directory -Path "${buildfolder}" -ErrorAction Ignore | Out-Null
New-Item -ItemType Directory -Path "${buildfolder}/tools" -ErrorAction Ignore | Out-Null
Write-Host "Building Setup..."
iscc "/O./${buildfolder}/tools" "/F$installerfilename" ..\Windows\DnsServiceSetup.iss | Out-Null
if ($LASTEXITCODE -ne 0) {
Write-Host "Error: Inno Setup Compile Failed!"
return
} else {
Write-Host "Build Success!"
}
$installerfilename = "${installerfilename}.exe"
$version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("./${buildfolder}/tools/${installerfilename}").ProductVersion
Write-Host "Version: $version"
if (!$version) {
Write-Host "Error: Could not get Product Version from Installer File"
return
}
Write-Host "Copying files..."
$nuspecfilename = ""
$files = Get-ChildItem -Path .
foreach ($file in $files) {
if ($file.Name.StartsWith("build")) {
#Skip any build files starting with the word build (ie: build.ps1)
continue
}
if ($file.Name.EndsWith(".template")) {
Write-Host "Build $($file.Name)"
$outfilename = ($file.Name -replace ".{9}$")
$templater = Get-Content "$($file.Name)" -Raw
$templater = $templater -replace "%fileversion%", "$version"
$templater = $templater -replace "%installfile%", "$installerfilename"
$outpath = "${buildfolder}/"
if (!$outfilename.EndsWith(".nuspec")) {
$outpath = "${outpath}/tools/"
} else {
$nuspecfilename = $outfilename
}
$templater | Out-File "${outpath}/${outfilename}"
} else {
Write-Host "Copy $($file.Name)"
$outpath = "${buildfolder}/"
if (!$file.Name.EndsWith(".nuspec")) {
$outpath = "${outpath}/tools/"
} else {
$nuspecfilename = $file.Name
}
Copy-Item "$($file.Name)" "${outpath}/$($file.Name)"
}
}
Write-Host "Create Package..."
cpack ${buildfolder}/${nuspecfilename} --out ../Release
Write-Host "Remove Build Folder"
Remove-Item -Path "${buildfolder}" -Recurse
Write-Host "COMPLETE!"

View File

@@ -0,0 +1,14 @@
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$file = "$toolsDir/%installfile%"
$packageArgs = @{
packageName = $env:ChocolateyPackageName
fileType = 'EXE'
file = $file
silentArgs = "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LOG=`"$($env:TEMP)\$($env:chocolateyPackageName).$($env:chocolateyPackageVersion).Install.log`" /skipnet=true"
validExitCodes= @(0)
}
Install-ChocolateyInstallPackage @packageArgs

View File

@@ -0,0 +1,31 @@
$ErrorActionPreference = 'Stop';
$packageName = 'technitiumdnsserver'
$softwareName = 'Technitium DNS Server*'
$installerType = 'EXE'
$silentArgs = "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LOG=`"$($env:TEMP)\$($env:chocolateyPackageName).$($env:chocolateyPackageVersion).Uninstall.log`""
$validExitCodes = @(0)
$uninstalled = $false
[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName
if ($key.Count -eq 1) {
$key | ForEach-Object {
$file = "$($_.UninstallString.Trim('"'))"
Uninstall-ChocolateyPackage `
-PackageName $packageName `
-FileType $installerType `
-SilentArgs "$silentArgs" `
-ValidExitCodes $validExitCodes `
-File "$file"
}
} elseif ($key.Count -eq 0) {
Write-Warning "$packageName has already been uninstalled by other means."
} elseif ($key.Count -gt 1) {
Write-Warning "$key.Count matches found!"
Write-Warning "To prevent accidental data loss, no programs will be uninstalled."
Write-Warning "Please alert package maintainer the following keys were matched:"
$key | ForEach-Object {Write-Warning "- $_.DisplayName"}
}

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>technitiumdnsserver</id>
<version>%fileversion%</version>
<owners>Shreyas Zare</owners>
<title>Technitium DNS Server</title>
<authors>Shreyas Zare, Contributors</authors>
<projectUrl>https://technitium.com/dns/</projectUrl>
<projectSourceUrl>https://github.com/TechnitiumSoftware/DnsServer</projectSourceUrl>
<bugTrackerUrl>https://github.com/TechnitiumSoftware/DnsServer/issues</bugTrackerUrl>
<copyright>Shreyas Zare</copyright>
<tags>dns dhcp</tags>
<iconUrl>https://technitium.com/img/logo25x25.png</iconUrl>
<dependencies>
<dependency id="dotnet-5.0-desktopruntime" version="5.0.0" />
</dependencies>
<summary>Open Source DNS and DHCP Server.</summary>
<description>
Technitium DNS Server is an open source tool that can be used for self hosting a local DNS server for privacy &amp; security or, used for experimentation/testing by software developers on their computer. It works out-of-the-box with no or minimal configuration and provides a user friendly web console accessible using any web browser.
Features:
* Works on Windows, Linux, macOS and Raspberry Pi.
* Installs in just a minute and works out-of-the-box with zero configuration.
* Block Ads using one or more block list URLs.
* Run [DNS-over-TLS](https://en.wikipedia.org/wiki/DNS_over_TLS) and [DNS-over-HTTPS](https://en.wikipedia.org/wiki/DNS_over_HTTPS) DNS service on your network.
* Use public DNS resolvers like Cloudflare, Google &amp; Quad9 with DNS-over-TLS and DNS-over-HTTPS protocols as forwarders.
* Advance caching with features like serve stale, prefetching and auto prefetching.
* Supports working as an authoritative as well as a recursive DNS server.
* CNAME cloaking feature to block domain names that resolve to CNAME which are blocked.
* QNAME minimization support in recursive resolver [draft-ietf-dnsop-rfc7816bis-04](https://tools.ietf.org/html/draft-ietf-dnsop-rfc7816bis-04).
* QNAME randomization support for UDP transport protocol [draft-vixie-dnsext-dns0x20-00](https://tools.ietf.org/html/draft-vixie-dnsext-dns0x20-00).
* ANAME propriety record support to allow using CNAME like feature at zone root.
* Primary, Secondary, Stub and Conditional Forwarder zone support.
* Host domain names on your own DNS server.
* Wildcard sub domain support.
* Enable/disable zones and records to allow testing with ease.
* Built-in DNS Client with option to import responses to local zone.
* Supports out-of-order DNS request processing for DNS-over-TCP and DNS-over-TLS protocols.
* Built-in DHCP Server that can work for multiple networks.
* IPv6 support in DNS server core.
* HTTP &amp; SOCKS5 proxy support which can be configured to route DNS over Tor Network or use Cloudflare's hidden DNS resolver.
* Web console portal for easy configuration using any web browser.
* Built-in system logging and query logging.
</description>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>

View File

@@ -0,0 +1,70 @@
#define PRODUCT_NAME "DNS Server"
#define APPID "{{9B86AC7F-53B3-4E31-B245-D4602D16F5C8}"
#define PRODUCT_VERSION "5.6"
#define COMPANY "Technitium"
#define TITLE "Technitium DNS Server"
#define APP_URL "https://technitium.com/dns/"
#define FILES_LOCATION "..\..\DnsService\bin\Release\net5.0-windows7.0"
#define TRAYAPP_LOCATION "..\..\DnsServerSystemTrayApp\obj\Release"
#define TRAYAPP_FILENAME "DnsServerSystemTrayApp.exe"
#define SERVICE_NAME "DnsService"
#define SERVICE_FILE "DnsService.exe"
#define SERVICE_DISPLAY_NAME "Technitium DNS Server"
#define SERVICE_DESCRIPTION "Technitium DNS Server"
#define CONFIG_FOLDER_COMPANY "{localappdata}\Technitium"
#define CONFIG_FOLDER_FULL CONFIG_FOLDER_COMPANY + "\DNS Server"
#define LEGACY_INSTALLER_APPID "{9B86AC7F-53B3-4E31-B245-D4602D16F5C8}"
#define LEGACY_INSTALLER_CONFIG_PATH "{commonpf32}\Technitium\DNS Server\config"
[Setup]
PrivilegesRequired=admin
AppName={#TITLE}
AppVersion={#PRODUCT_VERSION}
AppId={#APPID}
DefaultDirName={commonpf32}\{#COMPANY}\{#PRODUCT_NAME}
DefaultGroupName={#COMPANY}
DisableProgramGroupPage=yes
AppCopyright=Copyright (c) 2021 {#COMPANY}
AppPublisher={#COMPANY}
AppSupportURL={#APP_URL}
AppPublisherURL={#APP_URL}
OutputDir=..\Release
OutputBaseFilename=DnsServiceSetup
CloseApplications=no
Compression=lzma2/max
SetupIconFile=logo.ico
WizardSmallImageFile=logo.bmp
[Files]
Source: "{#TRAYAPP_LOCATION}\{#TRAYAPP_FILENAME}"; DestDir: "{app}";
Source: "{#FILES_LOCATION}\*.*"; Excludes: "*.pdb,*.runtimeconfig.dev.json"; DestDir: "{app}"; Flags: recursesubdirs;
[Tasks]
Name: "desktopicon"; Description: "Create an icon on the &desktop";
[CustomMessages]
RemoveConfig=Do you want to remove the configuration files?%n%nClick No to keep your settings.
RemoveConfigFail=Some configuration files could not be automatically removed.
ServiceInstallFailure=The DNS Service could not be installed. %1
ServiceManagerUnavailable=The Service Manager is not available!
DependenciesDir=.
[Icons]
Name: "{userprograms}\Technitium DNS Server"; Comment: "DNS Server Tray App"; Filename: "{app}\DnsServerSystemTrayApp.exe"; WorkingDir: "{app}\"; Flags: createonlyiffileexists
Name: "{userdesktop}\Technitium DNS Server"; Filename: "{app}\DnsServerSystemTrayApp.exe"; WorkingDir: "{app}\"; Flags: createonlyiffileexists; Tasks: desktopicon
[Run]
Filename: "{app}\DnsServerSystemTrayApp.exe"; Description: "Run the Tray App"; Flags: postinstall nowait;
;Include the dependency code
#include "depend\lang\english.iss"
#include "depend\products.iss"
#include "depend\products\dotnet5.iss"
[Code]
//Include the setup code
#include "DnsServiceSetup.pas"

View File

@@ -0,0 +1,229 @@
//Include the sc functionality
#include "service.pas"
#include "helper.pas"
#include "legacy.pas"
{
Skips the tasks page if it is an upgrade install
}
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := (PageID = wpSelectTasks) and IsUpgrade;
end;
function InitializeSetup(): boolean;
begin
//Specify the dependencies to install here
dotnet_5_desktop();
if IsLegacyInstallerInstalled or IsLegacyConfigAvailable then begin
AdditionalMemo := AdditionalMemo + #13#10 + #13#10 + 'Previous Version:';
end;
if IsLegacyInstallerInstalled then begin
AdditionalMemo := AdditionalMemo + #13#10 + ' Remove Legacy Installer';
end;
if IsLegacyConfigAvailable then begin
AdditionalMemo := AdditionalMemo + #13#10 + ' Migrate Configuration';
end;
Result := true;
end;
{
Kills the tray app
}
procedure KillTrayApp;
begin
TaskKill('{#TRAYAPP_FILENAME}');
end;
{
Stops the service
}
procedure DoStopService();
var
stopCounter: Integer;
serviceStopped: Boolean;
begin
stopCounter := 0;
if IsServiceInstalled('{#SERVICE_NAME}') then begin
Log('Service: Already installed');
if IsServiceRunning('{#SERVICE_NAME}') then begin
Log('Service: Already running, stopping service...');
StopService('{#SERVICE_NAME}');
while IsServiceRunning('{#SERVICE_NAME}') do
begin
if stopCounter > 2 then begin
Log('Service: Waited too long to stop, killing task...');
TaskKill('{#SERVICE_FILE}');
Log('Service: Task killed');
break;
end else begin
Log('Service: Waiting for stop');
Sleep(2000);
stopCounter := stopCounter + 1
end;
end;
if stopCounter < 3 then Log('Service: Stopped');
end;
end;
end;
{
Removes the service from the computer
}
procedure DoRemoveService();
var
stopCounter: Integer;
begin
stopCounter := 0;
if IsServiceInstalled('{#SERVICE_NAME}') then begin
Log('Service: Already installed, begin remove...');
if IsServiceRunning('{#SERVICE_NAME}') then begin
Log('Service: Already running, stopping...');
StopService('{#SERVICE_NAME}');
while IsServiceRunning('{#SERVICE_NAME}') do
begin
if stopCounter > 2 then begin
Log('Service: Waited too long to stop, killing task...');
TaskKill('{#SERVICE_FILE}');
Log('Service: Task killed');
break;
end else begin
Log('Service: Waiting for stop');
Sleep(2000);
stopCounter := stopCounter + 1
end;
end;
end;
stopCounter := 0;
Log('Service: Removing...');
RemoveService('{#SERVICE_NAME}');
while IsServiceInstalled('{#SERVICE_NAME}') do
begin
if stopCounter > 2 then begin
Log('Service: Waited too long to remove, continuing');
break;
end else begin
Log('Service: Waiting for removal');
Sleep(2000);
stopCounter := stopCounter + 1
end;
end;
if stopCounter < 3 then Log('Service: Removed');
end;
end;
{
Installs the service onto the computer
}
procedure DoInstallService();
var
InstallSuccess: Boolean;
StartServiceSuccess: Boolean;
MsgResult: Integer;
stopCounter: Integer;
begin
stopCounter := 0;
if IsServiceInstalled('{#SERVICE_NAME}') then begin
Log('Service: Already installed, skip install service');
end else begin
Log('Service: Begin Install');
InstallSuccess := InstallService(ExpandConstant('{app}\DnsService.exe'), '{#SERVICE_NAME}', '{#SERVICE_DISPLAY_NAME}', '{#SERVICE_DESCRIPTION}', SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START);
if not InstallSuccess then
begin
Log('Service: Install Fail ' + ServiceErrorToMessage(GetLastError()));
SuppressibleMsgBox(ExpandConstant('{cm:ServiceInstallFailure,' + ServiceErrorToMessage(GetLastError()) + '}'), mbCriticalError, MB_OK, IDOK);
end else begin
Log('Service: Install Success, Starting...');
StartService('{#SERVICE_NAME}');
while IsServiceRunning('{#SERVICE_NAME}') <> true do
begin
if stopCounter > 3 then begin
Log('Service: Waited too long to start, continue');
break;
end else begin
Log('Service: still starting')
Sleep(2000);
stopCounter := stopCounter + 1
end;
end;
if stopCounter < 4 then Log('Service: Started');
end;
end;
end;
{
Removes the generated configuration
}
procedure RemoveConfiguration();
var
DeleteSuccess: Boolean;
begin
Log('Delete configuration folder');
DeleteSuccess := DelTree(ExpandConstant('{#CONFIG_FOLDER_FULL}'), True, True, True);
if not DeleteSuccess then
begin
Log('Not all configuration files were deleted succesfully in ' + ExpandConstant('{#CONFIG_FOLDER_FULL}'));
SuppressibleMsgBox(ExpandConstant('{cm:RemoveConfigFail}'), mbError, MB_OK, IDOK);
end;
end;
{
Prompts to remove the configuration
On unattended installs, will keep config unless /removeconfig=true is supplied
}
procedure PromptRemoveConfiguration();
begin
case ExpandConstant('{param:removeconfig|prompt}') of
'prompt':
if SuppressibleMsgBox(ExpandConstant('{cm:RemoveConfig}'), mbConfirmation, MB_YESNO or MB_DEFBUTTON2, IDNO) = IDYES then
begin
RemoveConfiguration();
end;
'true':
RemoveConfiguration();
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin //Step happens just before installing files
WizardForm.StatusLabel.Caption := 'Stopping Tray App...';
KillTrayApp(); //Stop the tray app if running
if IsLegacyInstallerInstalled or IsLegacyConfigAvailable then begin
WizardForm.StatusLabel.Caption := 'Stopping Service...';
DoStopService(); //Stop the service if running
WizardForm.StatusLabel.Caption := 'Removing Legacy Installer...';
UninstallLegacyInstaller(); //Uninstall Legacy Installer if Installed already
WizardForm.StatusLabel.Caption := 'Migrating Configuration...';
MigrateConfiguration(); //Shift configuration into correct path
end else begin
WizardForm.StatusLabel.Caption := 'Uninstalling Service...';
DoRemoveService(); //Stop and remove the service if installed
end;
end;
if CurStep = ssPostInstall then begin //Step happens just after installing files
WizardForm.StatusLabel.Caption := 'Installing Service...';
DoInstallService(); //Install service after all files installed, if not a portable install
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then //Step happens before processing uninstall log
begin
UninstallProgressForm.StatusLabel.Caption := 'Stopping Tray App...';
KillTrayApp(); //Stop the tray app if running
UninstallProgressForm.StatusLabel.Caption := 'Uninstalling Service...';
DoRemoveService(); //Stop and remove the service
end;
if CurUninstallStep = usPostUninstall then //Step happens after processing uninstall log
begin
PromptRemoveConfiguration(); //Ask to remove any left over configuration files
end;
end;

View File

@@ -0,0 +1 @@
iscc DnsServiceSetup.iss

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
101=Ҫȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
102=%1 (%2 / %3)
103=%1 KB
104=%1 KB / %2 KB (%3%)
; Status information
110=<EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϣ
111=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1
112=<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
113=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ %1
114=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> %1
115=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
116=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> %1
; Error messages
120=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>\n\n%1
121=<EFBFBD><EFBFBD><EFBFBD>ʳ<EFBFBD><EFBFBD><EFBFBD> %1.\n\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>״̬<D7B4><CCAC>Ϊ %2.
122=URL <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>.\n\n%1
123=<EFBFBD>ļ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
124=<EFBFBD>ļ<EFBFBD><EFBFBD>򿪴<EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
125='%1' <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7> URL.
126=<EFBFBD>򿪳<EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
127=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
128=<EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ֻ֧<D6BB><D6A7> HTTP <20><> FTP <20><><EFBFBD><EFBFBD>.
129=<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> %1.\n\n%2
130=<EFBFBD><EFBFBD>ѯ״̬<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>.\n\n%1
131=<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
; Other
144=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
146=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
147=<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
; labels
160=<EFBFBD>ļ<EFBFBD>:
161=<EFBFBD>ٶ<EFBFBD>:
162=״̬:
163=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:
164=ʣ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:
165=<EFBFBD><EFBFBD>ǰ<EFBFBD>ļ<EFBFBD>:
166=<EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD>:
167=ȡ<EFBFBD><EFBFBD>
168=ȷ<EFBFBD><EFBFBD>
169=<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
170=<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>:
171=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

View File

@@ -0,0 +1,53 @@
[strings]
; Translation (c) 2005 Martin Koz<6F>k (martin.kozak@openoffice.cz)
; General
100=Sta<EFBFBD>en<EFBFBD> souboru
101=P<EFBFBD>ejete si p<>eru<72>it stahov<6F>n<EFBFBD>?
102=%1 (%2 z %3)
103=%1 KB
104=%1 KB z %2 KB (%3%)
; Status information
110=Z<EFBFBD>sk<EFBFBD>v<EFBFBD>n<EFBFBD> informac<61> o souboru...
111=P<EFBFBD>esm<EFBFBD>rov<EFBFBD>n<EFBFBD> na %1
112=Odes<EFBFBD>l<EFBFBD>n<EFBFBD> po<70>adavku...
113=Zpracov<EFBFBD>n<EFBFBD> %1
114=Spojen<EFBFBD> s %1 nav<61>z<EFBFBD>no
115=P<EFBFBD>ij<EFBFBD>m<EFBFBD>n<EFBFBD>...
116=P<EFBFBD>ipojov<EFBFBD>n<EFBFBD> k %1
; Error messages
120=Chyba p<>i p<>ipojov<6F>n<EFBFBD> k s<>ti Internet.\n\n%1
121=Chyba p<>i otev<65>r<EFBFBD>n<EFBFBD> %1.\n\nServer nastavil n<>vratov<6F> k<>d %2.
122=Chyba p<>i <20>ten<65> URL.\n\n%1
123=Chyba p<>i z<>pisu do souboru %1.\n\n%2
124=Chyba p<>i otev<65>r<EFBFBD>n<EFBFBD> souboru %1.\n\n%2
125='%1' nen<65> platn<74> URL.
126=Chyba p<>i otev<65>r<EFBFBD>n<EFBFBD> %1.\n\n%2
127=Chyba p<>i zas<61>l<EFBFBD>n<EFBFBD> po<70>adavku.\n\n%1
128=Nepodporovan<EFBFBD> protokol. Podporov<6F>ny jsou pouze protokoly HTTP a FTP.
129=Pokus o p<>ipojen<65> k %1 selhalo.\n\n%2
130=Pokus o z<>sk<73>n<EFBFBD> n<>vratov<6F>ho k<>du serveru selhal.\n\n%1
131=Chyba p<>i zad<61>v<EFBFBD>n<EFBFBD> po<70>adavku na soubor.\n\n%1
; Other
144=O knihovn<76>...
146=Sta<EFBFBD>en<EFBFBD> komponent
147=Pr<EFBFBD>vodce instalac<61> stahuje p<><70>davn<76> komponenty do va<76>eho po<70><6F>ta<74>e.
; labels
160=Soubor:
161=P<EFBFBD>enosov<EFBFBD> rychlost:
162=Stav:
163=Uplynul<EFBFBD> <20>as:
164=Zb<EFBFBD>vaj<EFBFBD>c<EFBFBD> <20>as:
165=Zpracov<EFBFBD>van<EFBFBD> soubor:
166=Celkov<EFBFBD> pr<70>b<EFBFBD>h:
167=Zru<EFBFBD>it
168=OK
169=U<EFBFBD>ivatelsk<EFBFBD> jm<6A>no a heslo
170=U<EFBFBD>ivatelsk<EFBFBD> jm<6A>no:
171=Heslo:

View File

@@ -0,0 +1,49 @@
[strings]
; Algemeen
100=Bestand downloaden
101=Wilt u de download annuleren?
102=1% (%2 van %3)
103=%1 KB
104=%1 KB van %2 KB (%3%)
; Status informatie
110=Bestandsinformatie ophalen ...
111=omgeleid naar %1
112=Verzoek verzenden ...
113=oplossen %1
114=Verbonden met 1%
115=Het ontvangen ...
116=Verbinden met %1
; foutmeldingen
120=Fout bij het verbinden met Internet. \n\n%1
121=Fout bij het openen van %1.\n\nDe server terug statuscode %2.
122=Fout bij het lezen URL.\n\n%1
123=Fout bij het schrijven bestand %1.\n\n%2
124=Fout bij openen bestand %1.\n\n%2
125='%1' is een ongeldige URL.
126=Fout bij openen %1.\n\n%2
127=Fout bij het verzenden verzoek.\n\n%1
128=Niet ondersteund protocol. Alleen HTTP en FTP-protocollen worden ondersteund.
129=Kan geen verbinding maken %1.\n\n%2
130=Kan de status code opvragen.\n\n%1
131=Fout bij het aanvragen van het bestand.\n\n%1
; anders
144=Over ...
146=Download
147=Setup is nu het downloaden van extra bestanden naar uw computer.
; etiket
160=Bestand:
161=Speed:
162=Status:
163=Verstreken tijd:
164=Resterende tijd:
165=Huidige File:
166=Algemeen Voortgang:
167=Annuleren
168=OK
169=gebruikersnaam en wachtwoord
170=Gebruikersnaam:
171=Wachtwoord:

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=File download
101=Do you want to cancel the download?
102=%1 (%2 of %3)
103=%1 KB
104=%1 KB of %2 KB (%3%)
; Status information
110=Getting file information...
111=Redirecting to %1
112=Sending request...
113=Resolving %1
114=Connected to %1
115=Receiving...
116=Connecting to %1
; Error messages
120=Error connecting to the internet.\n\n%1
121=Error opening %1.\n\nThe server returned status code %2.
122=Error reading URL.\n\n%1
123=Error writing file %1.\n\n%2
124=Error opening file %1.\n\n%2
125='%1' is an invalid URL.
126=Error opening %1.\n\n%2
127=Error sending request.\n\n%1
128=Unsupported protocol. Only HTTP and FTP protocols are supported.
129=Failed to connect to %1.\n\n%2
130=Failed to query status code.\n\n%1
131=Error requesting file.\n\n%1
; Other
144=About...
146=Download
147=Setup is now downloading additional files to your computer.
; labels
160=File:
161=Speed:
162=Status:
163=Elapsed Time:
164=Remaining Time:
165=Current File:
166=Overall Progress:
167=Cancel
168=OK
169=User Name and Password
170=User Name:
171=Password:

View File

@@ -0,0 +1,45 @@
[strings]
; General
100=T<EFBFBD>l<EFBFBD>chargement des fichiers
101=Souhaitez-vous annuler le t<>l<EFBFBD>chargement ?
102=%1 (%2 / %3)
103=%1 Ko
104=%1 Ko / %2 Ko (%3%)
; Etat du t<>l<EFBFBD>chargement
110=Acc<EFBFBD>s au fichier...
111=Redirection vers %1
112=Envoi de la requ<71>te...
113=Recherche %1
114=Connect<EFBFBD> <20> %1
115=R<EFBFBD>ception...
116=Connexion <20> %1
; Messages d'erreur
120=Impossible de se connecter <20> internet.\n\n%1
121=Impossible d'ouvrir %1.\n\nLe serveur a renvoy<6F> le code d'erreur %2.
122=Impossible de lire l'adresse.\n\n%1
123=Impossible de cr<63>er le fichier %1.\n\n%2
124=Impossible d'ouvrir le fichier %1.\n\n%2
125='%1' est une adresse incorrecte.
126=Impossible d'ouvrir %1.\n\n%2
127=Impossible d'acc<63>der au serveur.\n\n%1
128=Protocole non support<72>. Seuls les protocoles HTTP et FTP sont pris en charge.
129=Impossible de se connecter <20> %1.\n\n%2
130=Impossible de r<>cup<75>rer le code d'<27>tat.\n\n%1
131=Impossible de r<>cup<75>rer le fichier.\n\n%1
; Autre
144=A propos...
146=T<EFBFBD>l<EFBFBD>chargement
147=Certains fichiers requis vont <20>tre t<>l<EFBFBD>charg<72>s.
; Labels
160=Fichier :
161=Vitesse :
162=Etat :
163=Temps <20>coul<75> :
164=Temps restant :
165=Fichier courant :
166=Tous les fichiers :
167=Annuler

View File

@@ -0,0 +1,45 @@
[strings]
; General
100=T<EFBFBD>l<EFBFBD>chargement de fichier
101=Voulez vous annuler le t<>l<EFBFBD>chargement ?
102=%1 (%2 de %3)
103=%1 Ko
104=%1 Ko de %2 Ko (%3%)
; Status information
110=R<EFBFBD>ception des informations du fichier...
111=Redirection vers %1
112=envoie de la demande...
113=R<EFBFBD>solution %1
114=Connect<EFBFBD> a %1
115=R<EFBFBD>ception...
116=Connexion <20> %1
; Error messages
120=Erreur de connexion <20> Internet.\n\n%1
121=Erreur d'ouverture%1.\n\nLe Serveur <20> r<>pondu par le code d'<27>tat %2.
122=Erreur de lecture de l'URL.\n\n%1
123=Erreur d'<27>criture du fichier %1.\n\n%2
124=Erreur d'ouverture du fichier %1.\n\n%2
125='%1' est une URL invalide.
126=Erreur d<>ouverture %1.\n\n%2
127=Erreur pendant l'envoi de la demande.\n\n%1
128=Protocole non support<72>. Seuls les protocoles HTTP et FTP sont accept<70>s.
129=Echec de connexion <20> %1.\n\n%2
130=Echec d'obtention du code d'<27>tat.\n\n%1
131=Erreur lors de la demande du fichier.\n\n%1
; Other
144=A Propos...
146=T<EFBFBD>l<EFBFBD>chargement
147=LiveUpdate t<>l<EFBFBD>charge maintenant des fichiers compl<70>mentaires sur votre ordinateur.
; labels
160=Fichier:
161=Vitesse:
162=Etat:
163=Temps <20>coul<75>:
164=Temps restant:
165=Fichier en cours:
166=Avancement global:
167=Annuler

View File

@@ -0,0 +1,46 @@
; By Fabien ILLIDE (fabienillide@users.sourceforge.net)
[strings]
; General
100=T<EFBFBD>l<EFBFBD>chargement de fichier
101=Voulez-vous annuler le t<>l<EFBFBD>chargement ?
102=%1 (%2 de %3)
103=%1 Ko
104=%1 Ko de %2 Ko (%3%)
; Status information
110=Obtention des informations du fichier...
111=Redirection vers %1
112=Envoi de la requ<71>te...
113=R<EFBFBD>solution de %1
114=Connect<EFBFBD> <20> %1
115=R<EFBFBD>ception...
116=Connexion <20> %1
; Error messages
120=Erreur de connexion <20> Internet.\n\n%1
121=Erreur en ouvrant %1.\n\nLe serveur <20> retourn<72> le code d'<27>tat %2.
122=Erreur de lecture d'URL.\n\n%1
123=Erreur d'<27>criture pour %1.\n\n%2
124=Erreur en ouvrant le fichier %1.\n\n%2
125='%1' est une URL invalide.
126=Erreur en ouvrant %1.\n\n%2
127=Erreur d'envoi de requ<71>te.\n\n%1
128=Protocole non support<72>. Seuls les protocoles HTTP et FTP sont support<72>s.
129=Echec de connexion <20> %1.\n\n%2
130=Echec de demande du code d'<27>tat.\n\n%1
131=Erreur en demandant le fichier.\n\n%1
; Other
144=A propos...
146=T<EFBFBD>l<EFBFBD>charger
147=L'installateur t<>l<EFBFBD>charge maintenant les fichiers additionnels sur votre ordinateur.
; labels
160=Fichier :
161=Vitesse :
162=Etat :
163=Temps <20>coul<75> :
164=Temps restant :
165=Fichier en cours :
166=Avancement global :
167=Annuler

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=Datei herunterladen
101=M<EFBFBD>chten Sie das Herunterladen der Datei abbrechen?
102=%1 (%2 von %3)
103=%1 KB
104=%1 KB von %2 KB (%3%)
; Status information
110=Dateiinformationen werden ermittelt...
111=Weiterleitung zu %1
112=Anforderung wird gesendet...
113=Aufl<EFBFBD>sen von %1
114=Verbunden mit %1
115=Empfange...
116=Verbinden mit %1
; Error messages
120=Fehler beim Verbinden mit dem Internet.\n\n%1
121=Fehler beim <20>ffnen von %1.\n\nDer Server meldet Statuscode %2.
122=Fehler beim Lesen der URL.\n\n%1
123=Fehler beim Schreiben der Datei %1.\n\n%2
124=Fehler beim <20>ffnen der Datei %1.\n\n%2
125='%1' ist eine ung<6E>ltige URL.
126=Fehler beim <20>ffnen von %1.\n\n%2
127=Fehler beim Senden der Anforderung.\n\n%1
128=Protokoll wird nicht unterst<73>tzt. Nur HTTP und FTP werden unterst<73>tzt.
129=Verbindung zu %1 fehlgeschlagen.\n\n%2
130=Fehler bei der Abfrage des Statuscodes.\n\n%1
131=Fehler bei der Anforderung der Datei.\n\n%1
; Other
144=<EFBFBD>ber...
146=Download
147=Das Setup l<>dt nun zus<75>tzliche Dateien auf Ihren Computer.
; labels
160=Datei:
161=Geschwindigkeit:
162=Status:
163=Bisherige Zeit:
164=Verbleibende Zeit:
165=Aktuelle Datei:
166=Gesamter Vorgang:
167=Abbrechen
168=OK
169=Benutzername und Kennwort
170=Benutzername:
171=Kennwort:

Binary file not shown.

View File

@@ -0,0 +1,14 @@
[Files]
Source: "depend\isxdl\isxdl.dll"; Flags: dontcopy
[Code]
procedure isxdl_AddFile(URL, Filename: PAnsiChar);
external 'isxdl_AddFile@files:isxdl.dll stdcall';
function isxdl_DownloadFiles(hWnd: Integer): Integer;
external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';
function isxdl_SetOption(Option, Value: PAnsiChar): Integer;
external 'isxdl_SetOption@files:isxdl.dll stdcall';
[Setup]

View File

@@ -0,0 +1,49 @@
[strings]
; Generale
100=Download del file
101=Vuoi annullare il download?
102=%1 (%2 di %3)
103=%1 KB
104=%1 KB di %2 KB (%3%)
; Informazioni di servizio
110=Raccolta informazioni sul file...
111=Reindirizzamento a %1
112=Invio richiesta...
113=Risoluzione %1
114=Connesso al %1
115=Ricezione...
116=Collegamento a %1
; Messaggi di errore
120=Errore nel collegamento a Internet.\n\n%1
121=Errore nell'apertura di %1.\n\nIl server ha restituito il codice %2.
122=Errore nella lettura dell'URL.\n\n%1
123=Errore nella scrittura del file %1.\n\n%2
124=Errore nell'apertura del file %1.\n\n%2
125='%1' è un URL non valido.
126=Errore nell'apertura di %1.\n\n%2
127=Errore durante l'invio della richiesta.\n\n%1
128=Protocollo non supportato. Sono supportati solo i protocolli HTTP e FTP.
129=Impossibile connettersi a %1.\n\n%2
130=Impossibile risolvere il codice di servizio.\n\n%1
131=Errore nella richiesta del file.\n\n%1
; Altro
144=Informazioni su...
146=Download
147=Il programma d'installazione sta scaricando sul computer i files aggiuntivi.
; Etichette
160=File:
161=Velocità:
162=Stato:
163=Tempo trascorso:
164=Tempo rimanente:
165=File attuale:
166=Avanzamento generale:
167=Annulla
168=OK
169=Nome utente e password
170=Nome utente:
171=Password:

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>_<EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h
101=<EFBFBD>_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>H
102=%1 (%2 of %3)
103=%1 KB
104=%1 KB of %2 KB (%3%)
; Status information
110=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E693BE>...
111=<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g %1
112=<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>G<EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M...
113=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1
114=<EFBFBD>ڑ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1
115=<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD>...
116=<EFBFBD>ڑ<EFBFBD><EFBFBD><EFBFBD> %1
; Error messages
120=<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^<5E>[<5B>l<EFBFBD>b<EFBFBD>g<EFBFBD>ڑ<EFBFBD><DA91>G<EFBFBD><47><EFBFBD>[.\n\n%1
121=<EFBFBD>J<EFBFBD>n<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[ %1.\n\n<>T<EFBFBD>[<5B>o<EFBFBD>[<5B>̃X<CC83>e<EFBFBD>[<5B>^<5E>X<EFBFBD>R<EFBFBD>[<5B>h %2.
122=URL<EFBFBD>ǂݎ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[.\n\n%1
123=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃G<DD83><47><EFBFBD>[ %1.\n\n%2
124=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>G<EFBFBD><47><EFBFBD>[ %1.\n\n%2
125='%1' <20>͕s<CD95><73><EFBFBD><EFBFBD>URL<52>ł<EFBFBD>.
126=<EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>G<EFBFBD><47><EFBFBD>[ %1.\n\n%2
127=<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>G<EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[.\n\n%1
128=<EFBFBD>T<EFBFBD>|<7C>[<5B>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD><C882>v<EFBFBD><76><EFBFBD>g<EFBFBD>R<EFBFBD><52><EFBFBD>ł<EFBFBD>. HTTP<54><50>FTP<54>v<EFBFBD><76><EFBFBD>g<EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>|<7C>[<5B>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD>.
129=<EFBFBD>ڑ<EFBFBD><EFBFBD>Ɏ<EFBFBD><EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
130=<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>^<5E>X<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD>̖₢<CC96><E282A2><EFBFBD><EFBFBD><ED82B9><EFBFBD>s.\n\n%1
131=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>G<EFBFBD>X<EFBFBD>g<EFBFBD>G<EFBFBD><47><EFBFBD>[.\n\n%1
; Other
144=About...
146=<EFBFBD>_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h
147=<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD>̓R<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>[<5B>ɒlj<C992><C789>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD>.
; labels
160=<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43>:
161=<EFBFBD><EFBFBD><EFBFBD>x:
162=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
163=<EFBFBD>o<EFBFBD>ߎ<EFBFBD><EFBFBD><EFBFBD>:
164=<EFBFBD>c<EFBFBD><EFBFBD><EFBFBD>:
165=<EFBFBD><EFBFBD><EFBFBD>݂̃t<EFBFBD>@<40>C<EFBFBD><43>:
166=<EFBFBD>S<EFBFBD>̂̐i<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
167=<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><EFBFBD>
168=OK
169=<EFBFBD><EFBFBD><EFBFBD>[<5B>U<EFBFBD>[<5B>ƃp<C683>X<EFBFBD><58><EFBFBD>[<5B>h
170=<EFBFBD><EFBFBD><EFBFBD>[<5B>U<EFBFBD>[:
171=<EFBFBD>p<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>[<5B>h:

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF>ε<EFBFBD>
101=<EFBFBD>ٿ<EFBFBD><EFBFBD>ε带 <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?
102=%1 (%2 <20><> %3)
103=%1 KB
104=%1 KB <20><> %2 KB (%3%)
; Status information
110=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ް<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>...
111=Redirecting to %1
112=<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>...
113= %1
114=%1(<28><>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
115=<EFBFBD>޴<EFBFBD><EFBFBD><EFBFBD>...
116=%1(<28><>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
; Error messages
120=<EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.\n\n%1
121=<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD> <20>߻<EFBFBD> %1.\n\n<><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> %2.
122=URL<EFBFBD><EFBFBD> <20>д<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.\n\n%1
123=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD> %1.\n\n%2
124=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD> %1.\n\n%2
125='%1' <20><> <20>߸<EFBFBD><DFB8><EFBFBD> URL<52>Դϴ<D4B4>.
126=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD> %1.\n\n%2
127=<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n\n%1
128=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. HTTP <20><> FTP <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
129=%1<><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.\n\n%2
130=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.\n\n%1
131=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.\n\n%1
; Other
144=About...
146=<EFBFBD>ٿ<EFBFBD><EFBFBD>ε<EFBFBD>
147=<EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20>ϰ<EFBFBD> <20>˴ϴ<CBB4>.
; labels
160=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
161=<EFBFBD>ӵ<EFBFBD>:
162=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
163=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>:
164=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>:
165=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>:
166=<EFBFBD><EFBFBD>ü <20><><EFBFBD>൵:
167=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
168=Ȯ<EFBFBD><EFBFBD>
169=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
170=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>:
171=<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

View File

@@ -0,0 +1,47 @@
[strings]
; General
100=Nedlasting
101=Vil du avbryte nedlastinga?
102=%1 (%2 av %3)
103=%1 KB
104=%1 KB av %2 KB (%3%)
; Status information
110=Henter filinformasjon...
111=Omdirigerer til %1
112=Sender foresp<73>rsel...
113=Resolving %1
114=Oppkoblet mot %1
115=Mottar...
116=Kobler til %1
; Error messages
120=Feil ved oppkobling til Internett.\n\n%1
121=Feil ved <20>pning av %1.\n\nTjeneren returnerte statuskode %2.
122=Feil ved lesing av URL.\n\n%1
123=Feil ved skriving til '%1'.\n\n%2
124=Feil ved <20>pning av '%1'.\n\n%2
125='%1' er ikke en gyldig url.
126=Feil ved <20>pning av %1.\n\n%2
127=Feil ved sending av foresp<73>rsel.\n\n%1
128=Ikke st<73>ttet protokoll. Bare HTTP og FTP protokoller er st<73>ttet.
129=Klarte ikke <20> koble til %1.\n\n%2
130=Klarte ikke <20> lese statuskode.\n\n%1
131=Feil ved foresp<73>rsel av fil.\n\n%1
; Other
144=Om...
146=Nedlasting
147=Setup laster n<> ned flere filer til din datamaskin.
; labels
160=Fil:
161=Hastighet:
162=Status:
163=Brukt tid:
164=Gjenst<EFBFBD>ende tid:
165=Gjeldende fil:
166=Total fremgang:
167=Avbryt
168=OK
169=Brukernavn og passord
170=Brukernavn:
171=Passord:

View File

@@ -0,0 +1,45 @@
[strings]
; General
100=Pobieranie pliku
101=Czy chcesz przerwa<77> pobieranie?
102=%1 (%2 z %3)
103=%1 KB
104=%1 KB z %2 KB (%3%)
; Status information
110=Pobieranie informacji o pliku...
111=Przekierowywanie do %1
112=Wysy<EFBFBD>anie <20><>dania...
113=Rozwi<EFBFBD>zywanie %1
114=Po<EFBFBD><EFBFBD>czony z %1
115=Pobieranie...
116=Pod<EFBFBD><EFBFBD>czanie do %1
; Error messages
120=Nie mo<6D>na pod<6F><64>czy<7A> si<73> do Internetu.\n\n%1
121=B<EFBFBD><EFBFBD>d otwierania %1.\n\nSerwer zwr<77>ci<63> kod b<><62>du %2.
122=B<EFBFBD><EFBFBD>d czytania URL.\n\n%1
123=B<EFBFBD><EFBFBD>d zapisu pliku %1.\n\n%2
124=B<EFBFBD><EFBFBD>d otwarcia pliku %1.\n\n%2
125='%1' nie jest prawid<69>owym URL.
126=B<EFBFBD><EFBFBD>d otwarcia %1.\n\n%2
127=B<EFBFBD><EFBFBD>d wys<79>ania <20><>dania.\n\n%1
128=Nieznany protok<6F><6B>. Tylko protoko<6B>y HTTP i FTP s<> obs<62>ugiwane.
129=Nie uda<64>o si<73> pod<6F><64>czenie do %1.\n\n%2
130=Nie uda<64>o si<73> zapyta<74> o kod stanu.\n\n%1
131=B<EFBFBD><EFBFBD>d <20><>dania pliku.\n\n%1
; Other
144=O pobieraniu...
146=Pobieranie
147=W tej chwili Instalator pobiera dodatkowe pliki do Twojego komputera.
; labels
160=Plik:
161=Pr<EFBFBD>dko<EFBFBD><EFBFBD>:
162=Stan:
163=Up<EFBFBD>yn<EFBFBD><EFBFBD>o:
164=Pozosta<EFBFBD>y czas:
165=Aktualny plik:
166=Ca<EFBFBD>kowity post<73>p:
167=Anuluj

View File

@@ -0,0 +1,45 @@
[strings]
; General
100=Donwload de ficheiro
101=Deseja cancelar o donwload?
102=%1 (%2 de %3)
103=%1 KB
104=%1 KB de %2 KB (%3%)
; Status information
110=A receber informa<6D><61>o do ficheiro...
111=A redirecionar para %1
112=A enviar pedido...
113=A resolver %1
114=Ligado a %1
115=A receber...
116=A ligar a %1
; Error messages
120=Erro na liga<67><61>o <20> internet.\n\n%1
121=Erro na abertura de %1.\n\nO servidor retornou o c<>digo de erro %2.
122=Erro a ler o URL.\n\n%1
123=Erro na escrita do ficheiro %1.\n\n%2
124=Erro na abertura do ficheiro %1.\n\n%2
125='%1' <20> um URL inv<6E>lido.
126=Erro na abertura de %1.\n\n%2
127=Erro no envio do pedido.\n\n%1
128=Protocolo n<>o suportado.
129=Falha na liga<67><61>o a %1.\n\n%2
130=Falha na tentativa de retirar o c<>digo de status.\n\n%1
131=Erro no pedido do ficheiro.\n\n%1
; Other
144=Acerca...
146=Download
147=A instala<6C><61>o est<73> a efectuar o download de ficheiros adicionais necess<73>rios.
; labels
160=Ficheiro:
161=Velocidade:
162=Estado:
163=Tempo usado:
164=Tempo em falta:
165=Ficheiro:
166=Progresso:
167=Cancelar

View File

@@ -0,0 +1,46 @@
; By Ant<6E>nio Pinto (AP SoftWare)
[strings]
; Geral
100=Download
101=Deseja cancelar o download?
102=%1 (%2 de %3)
103=%1 KB
104=%1 KB de %2 KB (%3%)
; Status information
110=A receber informa<6D><61>o do ficheiro...
111=Redireccionando a %1
112=A enviar peti<74><69>o...
113=Resolvendo %1
114=Ligado a %1
115=A receber...
116=A efectuar liga<67><61>o a %1
; Error messages
120=Erro a ligar <20> Internet.\n\n%1
121=Erro ao abrir %1.\n\nO servidor devolveu o c<>digo %2.
122=Erro ao ler URL.\n\n%1
123=Erro ao escrever o ficheiro %1.\n\n%2
124=Erro ao abrir o ficheiro %1.\n\n%2
125='%1' <20> uma URL inv<6E>lida.
126=Erro ao abrir %1.\n\n%2
127=Erro ao enviar a peti<74><69>o.\n\n%1
128=Erro de protocolo. S<> os protocolos HTTP ou FTP s<>o aceites.
129=Erro ao ligar a %1.\n\n%2
130=Erro ao processar o c<>digo.\n\n%1
131=Erro ao procurar o ficheiro.\n\n%1
; Other
144=Acerca...
146=Descarregar
147=O assistente est<73> a descarregar ficheiros para o seu computador.
; labels
160=Ficheiro:
161=Velocidade:
162=Estado:
163=Tempo transcorrido:
164=Tempo estimado:
165=Ficheiro actual:
166=Progress<EFBFBD>o geral:
167=Cancelar

View File

@@ -0,0 +1,49 @@
[strings]
; General
100=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
101=<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
102=%1 (%2 <20><> %3)
103=%1 KB
104=%1 KB <20><> %2 KB (%3%)
; Status information
110=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>...
111=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> %1
112=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
113=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> %1
114=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> %1
115=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
116=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> %1
; Error messages
120=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
121=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1.\n\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %2.
122=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
123=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
124=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
125='%1' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
126=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %1.\n\n%2
127=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
128=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HTTP <20> FTP.
129=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> %1.\n\n%2
130=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
131=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.\n\n%1
; Other
144=<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
146=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
147=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
; labels
160=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
161=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
162=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
163=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
164=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
165=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>:
166=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
167=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
168=OK
169=<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
170=<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
171=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

View File

@@ -0,0 +1,46 @@
; By Lobo Lunar
[strings]
; General
100=Descarga
101=<EFBFBD>Deseas cancelar la descarga?
102=%1 (%2 de %3)
103=%1 KB
104=%1 KB de %2 KB (%3%)
; Status information
110=Recibiendo informaci<63>n del archivo...
111=Redireccionando a %1
112=Enviando petici<63>n...
113=Resolviendo %1
114=Conectando a %1
115=Descargando...
116=Conectando a %1
; Error messages
120=Error al conectar a Internet.\n\n%1
121=Error al abrir %1.\n\nEl servidor regres<65> %2.
122=Error al leer URL.\n\n%1
123=Error al escribir el archivo %1.\n\n%2
124=Error al abrir archivo %1.\n\n%2
125='%1' es URL inv<6E>lido.
126=Error al abrir %1.\n\n%2
127=Error al mandar petici<63>n.\n\n%1
128=Error de protocolo. S<>lo HTTP o FTP son aceptados.
129=Error al conectar a %1.\n\n%2
130=Error al procesar el c<>digo.\n\n%1
131=Error al buscar archivo.\n\n%1
; Other
144=Acerca...
146=Descargar
147=El asistente est<73> descargando archivos.
; labels
160=Archivo:
161=Velocidad:
162=Estado:
163=Tiempo transcurrido:
164=Tiempo estimado:
165=Archivo actual:
166=Progreso general:
167=Cancelar

View File

@@ -0,0 +1,48 @@
[strings]
; General
100=Fil Nedladdning
101=Vill du avbruta nedladdningen?
102=%1 (%2 av %3)
103=%1 KB
104=%1 KB av %2 KB (%3%)
; Status information
110=H<EFBFBD>mtar fil information...
111=Omdirigerar till %1
112=S<EFBFBD>nder f<>rfr<66>gan...
113=Delar upp %1
114=Ansluten %1
115=Tar emot...
116=Ansluter till %1
; Error messages
120=Fel vid anslutning till Internet.\n\n%1
121=Fel vid <20>ppning av %1.\n\nServern returnerade felkod %2.
122=Fel vid l<>sninga av URL.\n\n%1
123=Fel vid skrivning av fil %1.\n\n%2
124=Fel vid <20>ppning av fil %1.\n\n%2
125='%1' <20>r en felaktig URL.
126=Kan inte <20>ppna %1.\n\n%2
127=Fel vid s<>ndning av f<>rfr<66>gan.\n\n%1
128=St<EFBFBD>d saknas f<>r protokollet. Endast HTTP och FTP protokollen underst<73>ds.
129=Misslyckades att ansluta till %1.\n\n%2
130=Misslyckades att kontrollera status kod.\n\n%1
131=Fel vid f<>rfr<66>gan efter fil.\n\n%1
; Other
144=Om...
146=Ladd ner
147=Setup laddar nu ner till<6C>ggsfiler till din dator
; labels
160=Fil:
161=Hastighet:
162=Status:
163=F<EFBFBD>rfluten Time:
164=<EFBFBD>terst<EFBFBD>ende Time:
165=Nuvarande Fil:
166=Totalt F<>rlopp:
167=Avbryt
168=OK
169=Anv<EFBFBD>ndarnamn och L<>senord
170=Anv<EFBFBD>ndarnamn:
171=L<EFBFBD>senord:

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "chs"; MessagesFile: "compiler:Default.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
chs.lcid=2052
chs.depdownload_msg=安装程序需要下列依赖组建才能继续运行:%n%n%1%n要现在下载并安装吗
chs.depdownload_memo_title=下载依赖组建
chs.depinstall_memo_title=安装依赖组建
chs.depinstall_title=安装依赖组建
chs.depinstall_description=安装程序正在安装所需的依赖组建,请稍后。
chs.depinstall_status=正在安装 %1...
chs.depinstall_missing=必须安装 %1 之后才能继续本安装程序。请先安装 %1然后在重新运行本安装程序。
chs.depinstall_error=安装依赖组建时出错。请重新启动计算机并再次运行安装程序,或手动安装下列依赖组建:%n
chs.isxdl_langfile=chinese.ini
[Files]
Source: "scripts\isxdl\chinese.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
nl.lcid=1043
nl.depdownload_msg=De volgende toepassingen zijn nodig v<><76>r de installatie kunt doorgaan:%n%n%1%nDownload en installeer nu?
nl.depdownload_memo_title=Download afhankelijkheden
nl.depinstall_memo_title=Installeer afhankelijkheden
nl.depinstall_title=Installeer afhankelijkheden
nl.depinstall_description=Een moment geduld aub Setup installeert afhankelijkheden op uw computer.
nl.depinstall_status=Installeren %1...
nl.depinstall_missing=%1 moet worden ge<67>nstalleerd v<><76>r de installatie kan worden voortgezet. Installeer %1 en voer Setup opnieuw uit.
nl.depinstall_error=Er is een fout opgetreden tijdens het installeren van de afhankelijkheden. Gelieve de computer opnieuw op en voer de installatie opnieuw uit of de volgende afhankelijkheden handmatig installeren:%n
nl.isxdl_langfile=dutch.ini
[Files]
Source: "scripts\isxdl\dutch.ini"; Flags: dontcopy

View File

@@ -0,0 +1,18 @@
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
en.lcid=1033
en.depdownload_msg=The following applications are required before setup can continue:%n%n%1%nDownload and install now?
en.depdownload_memo_title=Download dependencies
en.depinstall_memo_title=Install dependencies
en.depinstall_title=Installing dependencies
en.depinstall_description=Please wait while Setup installs dependencies on your computer.
en.depinstall_status=Installing %1...
en.depinstall_missing=%1 must be installed before setup can continue. Please install %1 and run Setup again.
en.depinstall_error=An error occured while installing the dependencies. Please restart the computer and run the setup again or install the following dependencies manually:%n
en.isxdl_langfile=
[Files]

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
fr.lcid=1036
fr.depdownload_msg=Les applications suivantes sont n<>cessaires avant que l'installation puisse continuer :%n%n%1%nT<6E>l<EFBFBD>charger et installer maintenant ?
fr.depdownload_memo_title=T<>l<EFBFBD>charger les d<>pendances
fr.depinstall_memo_title=Installez les d<>pendances
fr.depinstall_title=Installation des d<>pendances
fr.depinstall_description=Veuillez patienter pendant que les d<>pendances sont install<6C>es sur votre ordinateur.
fr.depinstall_status=Installation de %1...
fr.depinstall_missing=%1 doit <20>tre install<6C> avant de pouvoir continuer. Veuillez installer %1 et ex<65>cutez <20> nouveau le programme d'installation.
fr.depinstall_error=Une erreur est survenue lors de l'installation des d<>pendances. Veuillez red<65>marrer l'ordinateur, et ex<65>cutez <20> nouveau le programme d'installation, ou installez les d<>pendances suivantes manuellement :%n
fr.isxdl_langfile=french3.ini
[Files]
Source: "scripts\isxdl\french3.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
de.lcid=1031
de.depdownload_msg=Die folgenden Programme werden ben<65>tigt bevor das Setup fortfahren kann:%n%n%1%nJetzt downloaden und installieren?
de.depdownload_memo_title=Abh<62>ngigkeiten downloaden
de.depinstall_memo_title=Abh<62>ngigkeiten installieren
de.depinstall_title=Installiere Abh<62>ngigkeiten
de.depinstall_description=Warten Sie bitte w<>hrend Abh<62>ngigkeiten auf Ihrem Computer installiert wird.
de.depinstall_status=Installiere %1...
de.depinstall_missing=%1 muss installiert werden bevor das Setup fortfahren kann. Bitte installieren Sie %1 und starten Sie das Setup erneut.
de.depinstall_error=Ein Fehler ist w<>hrend der Installation der Abgh<67>ngigkeiten aufgetreten. Bitte starten Sie den Computer neu und f<>hren Sie das Setup erneut aus oder installieren Sie die folgenden Abh<62>ngigkeiten per Hand:%n
de.isxdl_langfile=german.ini
[Files]
Source: "scripts\isxdl\german.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
it.lcid=1040
it.depdownload_msg=Le seguenti applicazioni sono necessarie per procedere con l'installazione:%n%n%1%nSi desidera scaricarle ed installarle adesso?
it.depdownload_memo_title=Dipendenze da scaricare
it.depinstall_memo_title=Dipendenze da installare
it.depinstall_title=Installazione delle dipendenze
it.depinstall_description=Si prega di attendere mentre vengono installate le dipendenze necessarie sul computer.
it.depinstall_status=Installazione %1...
it.depinstall_missing=%1 deve essere installato per poter continuare. Si prega di installare %1 ed eseguire nuovamente il programma d'installazione.
it.depinstall_error=Si è verificato un errore durante l'installazione delle dipendenze. Si prega di riavviare il computer ed eseguire nuovamente il programma d'installazione oppure di installare manualmente le seguenti applicazioni:%n
it.isxdl_langfile=italian.ini
[Files]
Source: "scripts\isxdl\italian.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
ja.lcid=1041
ja.depdownload_msg=処理を継続する前に次のアプリケーションが必要です:%n%n%1%nダウンロード後インストールしてよろしいですか
ja.depdownload_memo_title=ダウンロードする依存ファイル
ja.depinstall_memo_title=インストールする依存ファイル
ja.depinstall_title=依存ファイルのインストール
ja.depinstall_description=セットアップが依存ファイルをインストールするまでお待ちください
ja.depinstall_status=インストール中 %1...
ja.depinstall_missing=セットアップを継続するために %1 をインストールする必要があります. %1 をインストールし、再度セットアップを実行してください.
ja.depinstall_error=依存ファイルのインストール中にエラーが発生しました. コンピューターを再起動しセットアップを再度実行するか、依存ファイルを手動でインストールしてください:%n
ja.isxdl_langfile=japanese.ini
[Files]
Source: "scripts\isxdl\japanese.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
pl.lcid=1045
pl.depdownload_msg=Poniższe aplikacje są wymagane przed instalacją aby móc kontynuować:%n%n%1%nCzy pobrać je i zainstalować teraz?
pl.depdownload_memo_title=Pobierz zależności
pl.depinstall_memo_title=Zainstaluj zależności
pl.depinstall_title=Instalowanie zależności
pl.depinstall_description=Instalator instaluje zależności na komputerze, proszę czekać.
pl.depinstall_status=Instalowanie %1....
pl.depinstall_missing=%1 musi być zainstalowany przed instalacją, aby mogła ona być kontynuowana. Zainstaluj %1 i ponownie uruchom program instalacyjny.
pl.depinstall_error=Wystąpił błąd podczas instalowania zależności. Uruchom ponownie komputer, a następnie ponownie uruchom program instalacyjny lub ręcznie zainstaluj następujące programy:%n
pl.isxdl_langfile=polish.ini
[Files]
Source: "scripts\isxdl\polish.ini"; Flags: dontcopy

View File

@@ -0,0 +1,19 @@
[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
[CustomMessages]
;http://www.microsoft.com/globaldev/reference/lcid-all.mspx
ru.lcid=1049
ru.depdownload_msg=Для продолжения установки требуются следующие приложения:%n%n%1%nСкачать и установить их сейчас?
ru.depdownload_memo_title=Загрузить зависимости
ru.depinstall_memo_title=Установить зависимости
ru.depinstall_title=Установка зависимостей
ru.depinstall_description=Пожалуйста, подождите, пока зависимости будут установлены.
ru.depinstall_status=Установка %1...
ru.depinstall_missing=%1 должен быть установлен прежде чем установка может быть продолжена. Пожалуйста, установите %1 и повторите установку.
ru.depinstall_error=В процессе установки зависимостей произошла ошибка. Пожалуйста, перезапустите компьютер и повторите установку, либо установите следующие зависимости вручную:%n
ru.isxdl_langfile=russian.ini
[Files]
Source: "scripts\isxdl\russian.ini"; Flags: dontcopy

View File

@@ -0,0 +1,6 @@
#include "isxdl\isxdl.iss"
[Code]
#include "products.pas"
[Setup]

View File

@@ -0,0 +1,341 @@
{
--- TYPES AND VARIABLES ---
}
type
TProduct = record
File: String;
Title: String;
Parameters: String;
ForceSuccess : boolean;
InstallClean : boolean;
MustRebootAfter : boolean;
end;
InstallResult = (InstallSuccessful, InstallRebootRequired, InstallError);
var
installMemo, downloadMessage: string;
products: array of TProduct;
delayedReboot, isForcedX86: boolean;
DependencyPage: TOutputProgressWizardPage;
AdditionalMemo: string;
procedure AddProduct(filename, parameters, title, size, url: string; forceSuccess, installClean, mustRebootAfter : boolean);
{
Adds a product to the list of products to download.
Parameters:
filename: the file name under which to save the file
parameters: the parameters with which to run the file
title: the product title
size: the file size
url: the URL to download from
forceSuccess: whether to continue in case of setup failure
installClean: whether the product needs a reboot before installing
mustRebootAfter: whether the product needs a reboot after installing
}
var
path: string;
i: Integer;
begin
installMemo := installMemo + '%1' + title + #13;
path := ExpandConstant('{src}{\}') + CustomMessage('DependenciesDir') + '\' + filename;
if not FileExists(path) then begin
path := ExpandConstant('{tmp}{\}') + filename;
if not FileExists(path) then begin
isxdl_AddFile(url, path);
downloadMessage := downloadMessage + '%1' + title + ' (' + size + ')' + #13;
end;
end;
i := GetArrayLength(products);
SetArrayLength(products, i + 1);
products[i].File := path;
products[i].Title := title;
products[i].Parameters := parameters;
products[i].ForceSuccess := forceSuccess;
products[i].InstallClean := installClean;
products[i].MustRebootAfter := mustRebootAfter;
end;
function SmartExec(product : TProduct; var resultcode : Integer): boolean;
{
Executes a product and returns the exit code.
Parameters:
product: the product to install
resultcode: the exit code
}
begin
if (LowerCase(Copy(product.File, Length(product.File) - 2, 3)) = 'exe') then begin
Result := Exec(product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end else begin
Result := ShellExec('', product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end;
end;
function PendingReboot: boolean;
{
Checks whether the machine has a pending reboot.
}
var names: String;
begin
if (RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager', 'PendingFileRenameOperations', names)) then begin
Result := true;
end else if ((RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager', 'SetupExecute', names)) and (names <> '')) then begin
Result := true;
end else begin
Result := false;
end;
end;
function InstallProducts: InstallResult;
{
Installs the downloaded products
}
var
resultCode, i, productCount, finishCount: Integer;
begin
Result := InstallSuccessful;
productCount := GetArrayLength(products);
if productCount > 0 then begin
DependencyPage := CreateOutputProgressPage(CustomMessage('depinstall_title'), CustomMessage('depinstall_description'));
DependencyPage.Show;
for i := 0 to productCount - 1 do begin
if (products[i].InstallClean and (delayedReboot or PendingReboot())) then begin
Result := InstallRebootRequired;
break;
end;
DependencyPage.SetText(FmtMessage(CustomMessage('depinstall_status'), [products[i].Title]), '');
DependencyPage.SetProgress(i, productCount);
while true do begin
// set 0 as used code for shown error if SmartExec fails
resultCode := 0;
if SmartExec(products[i], resultCode) then begin
// setup executed; resultCode contains the exit code
if (products[i].MustRebootAfter) then begin
// delay reboot after install if we installed the last dependency anyways
if (i = productCount - 1) then begin
delayedReboot := true;
end else begin
Result := InstallRebootRequired;
end;
break;
end else if (resultCode = 0) or (products[i].ForceSuccess) then begin
finishCount := finishCount + 1;
break;
end else if (resultCode = 3010) then begin
// Windows Installer resultCode 3010: ERROR_SUCCESS_REBOOT_REQUIRED
delayedReboot := true;
finishCount := finishCount + 1;
break;
end;
end;
case MsgBox(FmtMessage(SetupMessage(msgErrorFunctionFailed), [products[i].Title, IntToStr(resultCode)]), mbError, MB_ABORTRETRYIGNORE) of
IDABORT: begin
Result := InstallError;
break;
end;
IDIGNORE: begin
break;
end;
end;
end;
if Result <> InstallSuccessful then begin
break;
end;
end;
// only leave not installed products for error message
for i := 0 to productCount - finishCount - 1 do begin
products[i] := products[i+finishCount];
end;
SetArrayLength(products, productCount - finishCount);
DependencyPage.Hide;
end;
end;
{
--------------------
INNO EVENT FUNCTIONS
--------------------
}
function PrepareToInstall(var NeedsRestart: boolean): String;
{
Before the "preparing to install" page.
See: http://www.jrsoftware.org/ishelp/index.php?topic=scriptevents
}
var
i: Integer;
s: string;
begin
delayedReboot := false;
case InstallProducts() of
InstallError: begin
s := CustomMessage('depinstall_error');
for i := 0 to GetArrayLength(products) - 1 do begin
s := s + #13 + ' ' + products[i].Title;
end;
Result := s;
end;
InstallRebootRequired: begin
Result := products[0].Title;
NeedsRestart := true;
// write into the registry that the installer needs to be executed again after restart
RegWriteStringValue(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', 'InstallBootstrap', ExpandConstant('{srcexe}'));
end;
end;
end;
function NeedRestart : boolean;
{
Checks whether a restart is needed at the end of install
See: http://www.jrsoftware.org/ishelp/index.php?topic=scriptevents
}
begin
Result := delayedReboot;
end;
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
{
Just before the "ready" page.
See: http://www.jrsoftware.org/ishelp/index.php?topic=scriptevents
}
var
s: string;
begin
if downloadMessage <> '' then
s := s + CustomMessage('depdownload_memo_title') + ':' + NewLine + FmtMessage(downloadMessage, [Space]) + NewLine;
if installMemo <> '' then
s := s + CustomMessage('depinstall_memo_title') + ':' + NewLine + FmtMessage(installMemo, [Space]) + NewLine;
if MemoDirInfo <> '' then
s := s + MemoDirInfo + NewLine + NewLine;
if MemoGroupInfo <> '' then
s := s + MemoGroupInfo + NewLine + NewLine;
if MemoTasksInfo <> '' then
s := s + MemoTasksInfo;
s := s + AdditionalMemo;
Result := s
end;
function NextButtonClick(CurPageID: Integer): boolean;
{
At each "next" button click
See: http://www.jrsoftware.org/ishelp/index.php?topic=scriptevents
}
begin
Result := true;
if CurPageID = wpReady then begin
if downloadMessage <> '' then begin
// change isxdl language only if it is not english because isxdl default language is already english
if (ActiveLanguage() <> 'en') then begin
ExtractTemporaryFile(CustomMessage('isxdl_langfile'));
isxdl_SetOption('language', ExpandConstant('{tmp}{\}') + CustomMessage('isxdl_langfile'));
end;
//isxdl_SetOption('title', FmtMessage(SetupMessage(msgSetupWindowTitle), [CustomMessage('appname')]));
//if SuppressibleMsgBox(FmtMessage(CustomMessage('depdownload_msg'), [FmtMessage(downloadMessage, [''])]), mbConfirmation, MB_YESNO, IDYES) = IDNO then
// Result := false
//else if
if isxdl_DownloadFiles(StrToInt(ExpandConstant('{wizardhwnd}'))) = 0 then
Result := false;
end;
end;
end;
{
-----------------------------
ARCHITECTURE HELPER FUNCTIONS
-----------------------------
}
function IsX86: boolean;
{
Gets whether the computer is x86 (32 bits).
}
begin
Result := isForcedX86 or (ProcessorArchitecture = paX86) or (ProcessorArchitecture = paUnknown);
end;
function IsX64: boolean;
{
Gets whether the computer is x64 (64 bits).
}
begin
Result := (not isForcedX86) and Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;
function GetString(x86, x64: String; w64: boolean): String;
{
Gets a string depending on the computer architecture.
Parameters:
x86: the string if the computer is x86
x64: the string if the computer is x64
ia64: the string if the computer is IA64
}
begin
if (IsX64() and (x64 <> '')) or (w64 and IsWin64 and (x64 <> '')) then begin
Result := x64;
end else begin
Result := x86;
end;
end;
function GetArchitectureString(w64: boolean): String;
{
Gets the "standard" architecture suffix string.
Returns either _x64, _ia64 or nothing.
}
begin
if IsX64() or (w64 and IsWin64) then begin
Result := 'x64';
end else begin
Result := 'x86';
end;
end;
procedure SetForceX86(value: boolean);
{
Forces the setup to use X86 products
}
begin
isForcedX86 := value;
end;
function StrSplit(Text: String; Separator: String): TArrayOfString;
var
i, p: Integer;
Dest: TArrayOfString;
begin
i := 0;
repeat
SetArrayLength(Dest, i+1);
p := Pos(Separator,Text);
if p > 0 then begin
Dest[i] := Copy(Text, 1, p-1);
Text := Copy(Text, p + Length(Separator), Length(Text));
i := i + 1;
end else begin
Dest[i] := Text;
Text := '';
end;
until Length(Text)=0;
Result := Dest
end;

View File

@@ -0,0 +1,49 @@
[CustomMessages]
dotnet_502_desktop_title=.NET 5.0.2 32-Bit Desktop Runtime
dotnet_502_desktop_title_x64=.NET 5.0.2 64-Bit Desktop Runtime
dotnet_502_desktop_size=47.1 MB
dotnet_502_desktop_size_x64=52.5 MB
dotnet_502_desktop_url=http://download.visualstudio.microsoft.com/download/pr/adeb8933-7480-4015-abf6-ca31137ad7cd/1123096ebfa5ee3f36d77500b622e4d8/windowsdesktop-runtime-5.0.2-win-x86.exe
dotnet_502_desktop_url_x64=http://download.visualstudio.microsoft.com/download/pr/deffc9d5-ef77-4697-ac6e-33a58ccdc409/8386e478b5823a765dc1361155360877/windowsdesktop-runtime-5.0.2-win-x64.exe
dotnet_502_runtime_title=.NET 5.0.2 32-Bit Runtime
dotnet_502_runtime_title_x64=.NET 5.0.2 64-Bit Runtime
dotnet_502_runtime_size=22.8 MB
dotnet_502_runtime_size_x64=25.3 MB
dotnet_502_runtime_url=http://download.visualstudio.microsoft.com/download/pr/46f8a025-ea67-4288-8e6a-709cfebc9b4b/69045dd85bcbfdd50441a87dedc13bd0/dotnet-runtime-5.0.2-win-x86.exe
dotnet_502_runtime_url_x64=http://download.visualstudio.microsoft.com/download/pr/8526b5e6-e6e7-4d0b-902b-1f4ad5dd1462/7de15b8c6ab0387402d5958e99a62ed9/dotnet-runtime-5.0.2-win-x64.exe
dotnet_501_desktop_title=.NET 5.0.1 32-Bit Desktop Runtime
dotnet_501_desktop_title_x64=.NET 5.0.1 64-Bit Desktop Runtime
dotnet_501_desktop_size=47.1 MB
dotnet_501_desktop_size_x64=52.5 MB
dotnet_501_desktop_url=http://download.visualstudio.microsoft.com/download/pr/55bb1094-db40-411d-8a37-21186e9495ef/1a045e29541b7516527728b973f0fdef/windowsdesktop-runtime-5.0.1-win-x86.exe
dotnet_501_desktop_url_x64=http://download.visualstudio.microsoft.com/download/pr/c6a74d6b-576c-4ab0-bf55-d46d45610730/f70d2252c9f452c2eb679b8041846466/windowsdesktop-runtime-5.0.1-win-x64.exe
dotnet_501_runtime_title=.NET 5.0.1 32-Bit Runtime
dotnet_501_runtime_title_x64=.NET 5.0.1 64-Bit Runtime
dotnet_501_runtime_size=22.7 MB
dotnet_501_runtime_size_x64=25.3 MB
dotnet_501_runtime_url=http://download.visualstudio.microsoft.com/download/pr/f4fb5042-8134-4434-8835-499eb2f18b38/6a0d857f6f1833f5c54fbbe5ead028a7/dotnet-runtime-5.0.1-win-x86.exe
dotnet_501_runtime_url_x64=http://download.visualstudio.microsoft.com/download/pr/93095e51-be33-4b28-99c8-5ae0ebba753d/501f77f4b95d2e9c3481246a3eff9956/dotnet-runtime-5.0.1-win-x64.exe
dotnet_500_desktop_title=.NET 5.0.0 32-Bit Desktop Runtime
dotnet_500_desktop_title_x64=.NET 5.0.0 64-Bit Desktop Runtime
dotnet_500_desktop_size=47.1 MB
dotnet_500_desktop_size_x64=52.6 MB
dotnet_500_desktop_url=http://download.visualstudio.microsoft.com/download/pr/b2780d75-e54a-448a-95fc-da9721b2b4c2/62310a9e9f0ba7b18741944cbae9f592/windowsdesktop-runtime-5.0.0-win-x86.exe
dotnet_500_desktop_url_x64=http://download.visualstudio.microsoft.com/download/pr/1b3a8899-127a-4465-a3c2-7ce5e4feb07b/1e153ad470768baa40ed3f57e6e7a9d8/windowsdesktop-runtime-5.0.0-win-x64.exe
dotnet_500_runtime_title=.NET 5.0.0 32-Bit Runtime
dotnet_500_runtime_title_x64=.NET 5.0.0 64-Bit Runtime
dotnet_500_runtime_size=22.7 MB
dotnet_500_runtime_size_x64=25.3 MB
dotnet_500_runtime_url=http://download.visualstudio.microsoft.com/download/pr/a7e15da3-7a15-43c2-a481-cf50bf305214/c69b951e8b47101e90b1289c387bb01a/dotnet-runtime-5.0.0-win-x86.exe
dotnet_500_runtime_url_x64=http://download.visualstudio.microsoft.com/download/pr/36a9dc4e-1745-4f17-8a9c-f547a12e3764/ae25e38f20a4854d5e015a88659a22f9/dotnet-runtime-5.0.0-win-x64.exe
[Code]
#include "dotnet5.pas"
[Setup]

View File

@@ -0,0 +1,213 @@
const
NoInstallNet = '{param:skipnet|false}'; //if this parameter is supplied on the command line then skip installing .NET dependencies
{ .NET 5.0.2 }
function DotNet_502_Desktop_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.WindowsDesktop.App 5.0.2"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
function DotNet_502_Runtime_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.NETCore.App 5.0.2"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
procedure dotnet_502_desktop;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_502_Desktop_Installed() then
AddProduct('windowsdesktop-runtime-5.0.2-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_502_desktop_title'), CustomMessage('dotnet_502_desktop_title_x64'), true),
GetString(CustomMessage('dotnet_502_desktop_size'), CustomMessage('dotnet_502_desktop_size_x64'), true),
GetString(CustomMessage('dotnet_502_desktop_url'), CustomMessage('dotnet_502_desktop_url_x64'), true),
false, false, false);
end;
end;
procedure dotnet_502_runtime;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_502_Runtime_Installed() then
AddProduct('dotnet-runtime-5.0.2-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_502_runtime_title'), CustomMessage('dotnet_502_runtime_title_x64'), true),
GetString(CustomMessage('dotnet_502_runtime_size'), CustomMessage('dotnet_502_runtime_size_x64'), true),
GetString(CustomMessage('dotnet_502_runtime_url'), CustomMessage('dotnet_502_runtime_url_x64'), true),
false, false, false);
end;
end;
{ .NET 5.0.1 }
function DotNet_501_Desktop_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.WindowsDesktop.App 5.0.1"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
function DotNet_501_Runtime_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.NETCore.App 5.0.1"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
procedure dotnet_501_desktop;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_501_Desktop_Installed() then
AddProduct('windowsdesktop-runtime-5.0.1-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_501_desktop_title'), CustomMessage('dotnet_501_desktop_title_x64'), true),
GetString(CustomMessage('dotnet_501_desktop_size'), CustomMessage('dotnet_501_desktop_size_x64'), true),
GetString(CustomMessage('dotnet_501_desktop_url'), CustomMessage('dotnet_501_desktop_url_x64'), true),
false, false, false);
end;
end;
procedure dotnet_501_runtime;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_501_Runtime_Installed() then
AddProduct('dotnet-runtime-5.0.1-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_501_runtime_title'), CustomMessage('dotnet_501_runtime_title_x64'), true),
GetString(CustomMessage('dotnet_501_runtime_size'), CustomMessage('dotnet_501_runtime_size_x64'), true),
GetString(CustomMessage('dotnet_501_runtime_url'), CustomMessage('dotnet_501_runtime_url_x64'), true),
false, false, false);
end;
end;
{ .NET 5.0.0 }
function DotNet_500_Desktop_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.WindowsDesktop.App 5.0.0"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
function DotNet_500_Runtime_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.NETCore.App 5.0.0"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode = 0 then
begin
Result := true;
end;
end;
procedure dotnet_500_desktop;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_500_Desktop_Installed() then
AddProduct('windowsdesktop-runtime-5.0.0-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_500_desktop_title'), CustomMessage('dotnet_500_desktop_title_x64'), true),
GetString(CustomMessage('dotnet_500_desktop_size'), CustomMessage('dotnet_500_desktop_size_x64'), true),
GetString(CustomMessage('dotnet_500_desktop_url'), CustomMessage('dotnet_500_desktop_url_x64'), true),
false, false, false);
end;
end;
procedure dotnet_500_runtime;
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_500_Runtime_Installed() then
AddProduct('dotnet-runtime-5.0.0-win' + GetArchitectureString(true) + '.exe',
'/install /quiet /norestart',
GetString(CustomMessage('dotnet_500_runtime_title'), CustomMessage('dotnet_500_runtime_title_x64'), true),
GetString(CustomMessage('dotnet_500_runtime_size'), CustomMessage('dotnet_500_runtime_size_x64'), true),
GetString(CustomMessage('dotnet_500_runtime_url'), CustomMessage('dotnet_500_runtime_url_x64'), true),
false, false, false);
end;
end;
{
any .NET 5
Checks for any version of .NET 5 and if none exists, installs latest
}
function DotNet_5_Desktop_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.WindowsDesktop.App 5"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// Only check for the 5 version number
if ResultCode = 0 then
begin
Result := true;
end;
end;
function DotNet_5_Runtime_Installed: Boolean;
var
ResultCode: Integer;
begin
Result := false;
Exec('cmd.exe', '/c dotnet --list-runtimes | find /n "Microsoft.NETCore.App 5"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// Only check for the 5 version number
if ResultCode = 0 then
begin
Result := true;
end;
end;
procedure dotnet_5_desktop;
begin
if not DotNet_5_Desktop_Installed() then
begin
dotnet_502_desktop();
{ if no .NET 5 version installed then install the one above }
end;
end;
procedure dotnet_5_runtime;
begin
if not DotNet_5_Runtime_Installed() then
begin
dotnet_502_runtime();
{ if no .NET 5 version installed then install the one above }
end;
end;

View File

@@ -0,0 +1,9 @@
[CustomMessages]
dotnet_fw48_title=.NET Framework 4.8 Runtime
dotnet_fw48_size=111 MB
dotnet_fw48_url=http://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe
[Code]
#include "dotnetfw4.pas"
[Setup]

View File

@@ -0,0 +1,40 @@
const
NoInstallNet = '{param:skipnet|false}'; //if this parameter is supplied on the command line then skip installing .NET dependencies
{ .NET Framework 4.8 }
function DotNet_Framework_48_Installed: Boolean;
var
KeyResult: String;
VersionParts: TArrayOfString;
RegVersion, MinVer: Int64;
VerDiff: Integer;
begin
Result := false;
RegQueryStringValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full', 'Version', KeyResult);
VersionParts := StrSplit(KeyResult, '.');
RegVersion := PackVersionComponents(StrToInt(VersionParts[0]), StrToInt(VersionParts[1]), StrToInt(VersionParts[2]), 0);
MinVer := PackVersionComponents(4, 8, 0, 0);
VerDiff := ComparePackedVersion(RegVersion, MinVer);
if VerDiff > -1 then
begin
Result := true;
end;
end;
procedure dotnet_framework_48();
begin
if ExpandConstant(NoInstallNet) = 'false' then
begin
if not DotNet_Framework_48_Installed() then
AddProduct('ndp48-x86-x64-allos-enu.exe',
'/install /quiet /norestart',
CustomMessage('dotnet_fw48_title'),
CustomMessage('dotnet_fw48_size'),
CustomMessage('dotnet_fw48_url'),
false, false, false);
end;
end;

View File

@@ -0,0 +1,91 @@
{
Helper functions
}
{
Checks to see if the installer is an 'upgrade'
}
function IsUpgrade: Boolean;
var
Value: string;
UninstallKey: string;
begin
UninstallKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' +
ExpandConstant('{#SetupSetting("AppId")}') + '_is1';
Result := (RegQueryStringValue(HKLM, UninstallKey, 'UninstallString', Value) or
RegQueryStringValue(HKCU, UninstallKey, 'UninstallString', Value)) and (Value <> '');
end;
{
Kills a running program by its filename
}
procedure TaskKill(fileName: String);
var
ResultCode: Integer;
begin
Exec(ExpandConstant('taskkill.exe'), '/f /im ' + '"' + fileName + '"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
{
Executes the MSI Uninstall by GUID functionality
}
function MsiExecUnins(appId: String): Integer;
var
ResultCode: Integer;
begin
ShellExec('', 'msiexec.exe', '/x ' + appId + ' /qn', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Result := ResultCode;
end;
{
Copies and entire folder
}
procedure DirectoryCopy(SourcePath, DestPath: string);
var
FindRec: TFindRec;
SourceFilePath: string;
DestFilePath: string;
begin
if FindFirst(SourcePath + '\*', FindRec) then
begin
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
SourceFilePath := SourcePath + '\' + FindRec.Name;
DestFilePath := DestPath + '\' + FindRec.Name;
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
if FileCopy(SourceFilePath, DestFilePath, False) then
begin
Log(Format('Copied %s to %s', [SourceFilePath, DestFilePath]));
end
else
begin
Log(Format('Failed to copy %s to %s', [SourceFilePath, DestFilePath]));
end;
end
else
begin
if DirExists(DestFilePath) or CreateDir(DestFilePath) then
begin
Log(Format('Created %s', [DestFilePath]));
DirectoryCopy(SourceFilePath, DestFilePath);
end
else
begin
Log(Format('Failed to create %s', [DestFilePath]));
end;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Log(Format('Failed to list %s', [SourcePath]));
end;
end;

View File

@@ -0,0 +1,73 @@
{
Legacy Installer Functionality
}
{
Checks if the MSI Installer is installed
}
function IsLegacyInstallerInstalled: Boolean;
var
Value: string;
UninstallKey: string;
begin
UninstallKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#LEGACY_INSTALLER_APPID}';
Result := (RegQueryStringValue(HKLM, UninstallKey, 'UninstallString', Value) or
RegQueryStringValue(HKCU, UninstallKey, 'UninstallString', Value)) and (Value <> '');
end;
{
Checks if Configuration exists in the old location.
}
function IsLegacyConfigAvailable: Boolean;
var
Value: string;
begin
Result := DirExists(ExpandConstant('{#LEGACY_INSTALLER_CONFIG_PATH}'));
end;
{
Uninstalls Legacy Installer
}
procedure UninstallLegacyInstaller;
var
ResultCode: Integer;
begin
if IsLegacyInstallerInstalled then begin
Log('Uninstall MSI installer item');
ResultCode := MsiExecUnins('{#LEGACY_INSTALLER_APPID}');
Log('Result code ' + IntToStr(ResultCode));
end;
end;
{
Migrates the Configuration to the new location
}
procedure MigrateConfiguration();
var
ConfigDirExists : Boolean;
begin
if IsLegacyConfigAvailable then begin
Log('Begin Configuration Migration');
ConfigDirExists := DirExists(ExpandConstant('{#CONFIG_FOLDER_COMPANY}'));
if not ConfigDirExists then begin
Log('Create config folder company');
CreateDir(ExpandConstant('{#CONFIG_FOLDER_COMPANY}'));
end;
ConfigDirExists := DirExists(ExpandConstant('{#CONFIG_FOLDER_FULL}'));
if not ConfigDirExists then begin
Log('Create config folder program');
CreateDir(ExpandConstant('{#CONFIG_FOLDER_FULL}'));
end;
DirectoryCopy(ExpandConstant('{#LEGACY_INSTALLER_CONFIG_PATH}'), ExpandConstant('{#CONFIG_FOLDER_FULL}'));
DelTree(ExpandConstant('{#LEGACY_INSTALLER_CONFIG_PATH}'), true, true, true);
Log('Complete Configuration Migration');
end;
end;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,224 @@
type
SERVICE_STATUS = record
dwServiceType : cardinal;
dwCurrentState : cardinal;
dwControlsAccepted : cardinal;
dwWin32ExitCode : cardinal;
dwServiceSpecificExitCode : cardinal;
dwCheckPoint : cardinal;
dwWaitHint : cardinal;
end;
HANDLE = cardinal;
const
SERVICE_QUERY_CONFIG = $1;
SERVICE_CHANGE_CONFIG = $2;
SERVICE_QUERY_STATUS = $4;
SERVICE_START = $10;
SERVICE_STOP = $20;
SERVICE_ALL_ACCESS = $f01ff;
SC_MANAGER_ALL_ACCESS = $f003f;
SERVICE_WIN32_OWN_PROCESS = $10;
SERVICE_WIN32_SHARE_PROCESS = $20;
SERVICE_WIN32 = $30;
SERVICE_INTERACTIVE_PROCESS = $100;
SERVICE_BOOT_START = $0;
SERVICE_SYSTEM_START = $1;
SERVICE_AUTO_START = $2;
SERVICE_DEMAND_START = $3;
SERVICE_DISABLED = $4;
SERVICE_DELETE = $10000;
SERVICE_CONTROL_STOP = $1;
SERVICE_CONTROL_PAUSE = $2;
SERVICE_CONTROL_CONTINUE = $3;
SERVICE_CONTROL_INTERROGATE = $4;
SERVICE_STOPPED = $1;
SERVICE_START_PENDING = $2;
SERVICE_STOP_PENDING = $3;
SERVICE_RUNNING = $4;
SERVICE_CONTINUE_PENDING = $5;
SERVICE_PAUSE_PENDING = $6;
SERVICE_PAUSED = $7;
ERROR_ACCESS_DENIED = 5;
ERROR_CIRCULAR_DEPENDENCY = 1059;
ERROR_DUPLICATE_SERVICE_NAME = 1078;
ERROR_INVALID_HANDLE = 6;
ERROR_INVALID_NAME = 123;
ERROR_INVALID_PARAMETER = 87;
ERROR_INVALID_SERVICE_ACCOUNT = 1057;
ERROR_SERVICE_EXISTS = 1073;
ERROR_SERVICE_MARKED_FOR_DELETE = 1072;
// #######################################################################################
// nt based service utilities
// #######################################################################################
function OpenSCManager(lpMachineName, lpDatabaseName: string; dwDesiredAccess :cardinal): HANDLE;
external 'OpenSCManagerW@advapi32.dll stdcall';
function OpenService(hSCManager :HANDLE;lpServiceName: string; dwDesiredAccess :cardinal): HANDLE;
external 'OpenServiceW@advapi32.dll stdcall';
function CloseServiceHandle(hSCObject :HANDLE): boolean;
external 'CloseServiceHandle@advapi32.dll stdcall';
function CreateService(hSCManager :HANDLE;lpServiceName, lpDisplayName: string;dwDesiredAccess,dwServiceType,dwStartType,dwErrorControl: cardinal;lpBinaryPathName,lpLoadOrderGroup: String; lpdwTagId : cardinal;lpDependencies,lpServiceStartName,lpPassword :string): cardinal;
external 'CreateServiceW@advapi32.dll stdcall';
function DeleteService(hService :HANDLE): boolean;
external 'DeleteService@advapi32.dll stdcall';
function StartNTService(hService :HANDLE;dwNumServiceArgs : cardinal;lpServiceArgVectors : cardinal) : boolean;
external 'StartServiceW@advapi32.dll stdcall';
function ControlService(hService :HANDLE; dwControl :cardinal;var ServiceStatus :SERVICE_STATUS) : boolean;
external 'ControlService@advapi32.dll stdcall';
function QueryServiceStatus(hService :HANDLE;var ServiceStatus :SERVICE_STATUS) : boolean;
external 'QueryServiceStatus@advapi32.dll stdcall';
function QueryServiceStatusEx(hService :HANDLE;ServiceStatus :SERVICE_STATUS) : boolean;
external 'QueryServiceStatus@advapi32.dll stdcall';
function GetLastError(): dword;
external 'GetLastError@kernel32.dll stdcall';
function OpenServiceManager(): HANDLE;
begin
if UsingWinNT() = true then begin
Result := OpenSCManager('', 'ServicesActive', SC_MANAGER_ALL_ACCESS);
if Result = 0 then
MsgBox(ExpandConstant('{cm:ServiceManagerUnavailable}'), mbError, MB_OK);
end
else begin
MsgBox('only nt based systems support services', mbError, MB_OK);
Result := 0;
end
end;
function IsServiceInstalled(ServiceName: string): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := OpenService(hSCM, ServiceName, SERVICE_QUERY_CONFIG);
if hService <> 0 then begin
Result := true;
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end
end;
function InstallService(FileName, ServiceName, DisplayName, Description: string; ServiceType, StartType: cardinal): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := CreateService(hSCM, ServiceName, DisplayName, SERVICE_ALL_ACCESS, ServiceType, StartType, 0, FileName,'', 0, '', '', '');
if hService <> 0 then begin
Result := true;
// Win2K & WinXP supports aditional description text for services
if Description <> '' then
RegWriteStringValue(HKLM,'System\CurrentControlSet\Services\' + ServiceName, 'Description', Description);
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end;
end;
function RemoveService(ServiceName: string): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := OpenService(hSCM, ServiceName, SERVICE_DELETE);
if hService <> 0 then begin
Result := DeleteService(hService);
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end;
end;
function StartService(ServiceName: string): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := OpenService(hSCM, ServiceName, SERVICE_START);
if hService <> 0 then begin
Result := StartNTService(hService, 0, 0);
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end;
end;
function StopService(ServiceName: string): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
Status : SERVICE_STATUS;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := OpenService(hSCM, ServiceName, SERVICE_STOP);
if hService <> 0 then begin
Result := ControlService(hService, SERVICE_CONTROL_STOP, Status);
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end;
end;
function IsServiceRunning(ServiceName: string): boolean;
var
hSCM : HANDLE;
hService: HANDLE;
Status : SERVICE_STATUS;
begin
hSCM := OpenServiceManager();
Result := false;
if hSCM <> 0 then begin
hService := OpenService(hSCM, ServiceName, SERVICE_QUERY_STATUS);
if hService <> 0 then begin
if QueryServiceStatus(hService, Status) then begin
Result :=(Status.dwCurrentState = SERVICE_RUNNING);
end;
CloseServiceHandle(hService);
end;
CloseServiceHandle(hSCM);
end
end;
function ServiceErrorToMessage(Error: word): string;
begin
case Error of
ERROR_ACCESS_DENIED: Result := 'Access Denied';
ERROR_CIRCULAR_DEPENDENCY: Result := 'Circular Dependency';
ERROR_DUPLICATE_SERVICE_NAME: Result := 'Duplicate Service Name';
ERROR_INVALID_HANDLE: Result := 'Invalid Handle';
ERROR_INVALID_NAME: Result := 'Invalid Name';
ERROR_INVALID_PARAMETER: Result := 'Invalid Parameter';
ERROR_INVALID_SERVICE_ACCOUNT: Result := 'Invalid Service Account';
ERROR_SERVICE_EXISTS: Result := 'Service Exists';
ERROR_SERVICE_MARKED_FOR_DELETE: Result := 'Service Marked For Deletion';
else
Result := 'Unknown error: ' + IntToStr(Error);
end;
end;