Menu

[r2058]: / trunk / Src / InstallHelper / CSSetupHelper.dpr  Maximize  Restore  History

Download this file

144 lines (123 with data), 3.7 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
{
* CSSetupHelper.dpr
*
* Helper program that is called from CodeSnip's installation program. Gets the
* original user's application data folder and writes it to a file that can be
* read by install program.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is CSSetupHelper.dpr
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2008-2009 Peter
* Johnson. All Rights Reserved.
*
* Contributors:
* NONE
*
* ***** END LICENSE BLOCK *****
}
program CSSetupHelper;
{$ALIGN 8}
{$APPTYPE CONSOLE}
{$BOOLEVAL ON}
{$DESCRIPTION 'CodeSnip Install Helper'}
{$EXTENDEDSYNTAX ON}
{$HINTS ON}
{$IOCHECKS ON}
{$LONGSTRINGS ON}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$TYPEDADDRESS OFF}
{$WARNINGS ON}
{$WRITEABLECONST OFF}
{
NOTE:
This program gets the path to the application data folder for the current
user and writes it to a file.
The file is a text file in the INI file format. There is only one section,
named SpecialFolders. The path to the application data folder is written to
the only key in the section, named CSIDL_APPDATA.
This format can obviously be extended with other user specific special
folders.
}
{$R CSSetupHelperRes.res} // general resources
{$R VCSSetupHelper.res} // version information
uses
// Delphi
Windows, ShlObj, ActiveX;
procedure FreePIDL(PIDL: PItemIDList);
{Uses to shell allocator to free the memory used by a PIDL.
@param PIDL [in] PIDL that is to be freed.
}
var
Malloc: IMalloc; // shell's allocator
begin
if Succeeded(SHGetMalloc(Malloc)) then
Malloc.Free(PIDL);
end;
function PIDLToFolderPath(PIDL: PItemIDList): string;
{Returns the full path to a file system folder described by a PIDL.
@param PIDL [in] PIDL describing folder.
@return Full path to folder described by PIDL or '' if PIDL refers to
virtual folder.
}
begin
SetLength(Result, MAX_PATH);
if SHGetPathFromIDList(PIDL, PChar(Result)) then
Result := PChar(Result)
else
Result := '';
end;
function SpecialFolderPath(CSIDL: Integer): string;
{Returns the full path to a special file system folder.
@param CSIDL [in] Specifies the special folder.
@return Folder path or '' if the special folder is virtual or CSIDL not
supported on the OS.
}
var
PIDL: PItemIDList; // PIDL of the special folder
begin
Result := '';
if Succeeded(SHGetSpecialFolderLocation(0, CSIDL, PIDL)) then
begin
try
Result := PIDLToFolderPath(PIDL);
finally
FreePIDL(PIDL);
end;
end
end;
var
TempFile: string; // temporary file user to store data
AppDataDir: string; // user's application data folder
begin
// Get file we are to write from command line (only param)
TempFile := ParamStr(1);
// Get user's application data folder and write it to temp file in ini format
AppDataDir := SpecialFolderPath(CSIDL_APPDATA);
WritePrivateProfileString(
'SpecialFolders',
'CSIDL_APPDATA',
PChar(AppDataDir),
PChar(TempFile)
);
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.