FredS
Members-
Content Count
418 -
Joined
-
Last visited
-
Days Won
4
Everything posted by FredS
-
Warning: Windows Update KB5028166 breaks NT Domains
FredS replied to dummzeuch's topic in Tips / Blogs / Tutorials / Videos
I use a Samba Domain on Ubuntu (16.04) and can login with KB5028166 installed from a 22H2 W10 VM.. I used a new Domain account to force new profile generation to make sure.. -
Found why LSP stopped working in Delphi 11.2 and 11.3
FredS replied to pyscripter's topic in Delphi IDE and APIs
Little has changed since Godzilla, or maybe some of that is back again. I still use a clean bat when switching between 'Build Configurations', that limits the problem even today. What it does is delete all DCUs which exist from all but the current 'Build Configuration'. -
Run process with normal user privileges from elevated process
FredS replied to PawelPepe's topic in Windows API
Not so simple then, I've not seen running code that executes with identical integrity, tokens and access.. A few posts on SO claim to have solved it but the Scheduler works so I've found no need to retest all for that.. ShellRun('Open', 'Schtasks', '/Create /F /SC ONCE /TN taskname /TR "<cmd>" /ST 00:00', swHide); ShellRun('Open', 'Schtasks', '/Run /TN taskname', swHide); ShellRun('Open', 'Schtasks', '/Delete /F /TN taskname', swHide); Add some error checking and it works.. -
Run process with normal user privileges from elevated process
FredS replied to PawelPepe's topic in Windows API
Once you run elevated you have access to the Scheduler, use Schtasks.exe to Create/Ru/Delete a task to run that app.. -
MSBuild - set library paths without touching IDE options
FredS replied to Fr0sT.Brutal's topic in General Help
This is how I compile with older versions of controls.. might help you get started. The CMD file is in the project root and changes directory to Source: @ECHO OFF :: :: How to Redirect to an older Version of VCL :: Since no IDE is required this will work for NON installed versions of any VCL controls ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: Redirect DX, to compile with source we need to update all these ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: REM @SET DXVCL=%VCL%\DevExpress VCL\20.2.8 (26-May-2021) for PA2-R12 REM IF NOT Exist "%DXVCL%" ( REM echo."%DXVCL%", Directory does not exist REM Pause ) REM CALL :SetEnvVar "DXLibs" REM CALL :SetEnvVar "DXSources" REM SET DX REM pause :: :: Redirect UNI, to compile with source we need to update all these ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: REM @SET UNIVCL=%VCL%\UniDAC\9.0.1 (14-Sep-2021) REM IF NOT Exist "%UNIVCL%" ( REM echo."%UNIVCL%", Directory does not exist REM Pause ) REM CALL :SetEnvVar "UNILIB" REM CALL :SetEnvVar "UniSources" REM SET Uni REM pause :: :: Environmental Vars declared in the IDE must be redeclared ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @SET CompilerV=28 @SET ProductVersion=22.0 @SET IDEVER=11.0.2 :: :: Now expand those with rsVars.bat ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: call "C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\rsvars.bat" :: :: Reset the rsVars.bat defaults ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @SET BDSCOMMONDIR=D:\Embarcadero Studio\22.0 :: :: Add the location of cmd.exe ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: @SET PATH=%WINDIR%\System32;%PATH% cd source :: Recomended in 10.4 Release Notes.. MSBuild APP.dproj /t:clean REM TIMEOUT /T 10 MSBuild APP.dproj /t:build /v:q /p:Config=Release /p:platform=Win64 cd .. :: View any output notices pause :: ========== FUNCTIONS ========== EXIT /B :: Read a Value from Environment :: Param 1: Name of output variable. :: Param 2: SubKey. :RegQueryEnv @ECHO OFF SET KEY="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" :: Remove the double quotes Set SUBKEY=%~2 FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query %KEY% /v "%SUBKEY%"') DO ( set %1=%%B ) EXIT /B :: Expand any EnvVars in the Text :: Param 1: Name of output variable. :: Param 2: Text to Expand (%UNIVCL%\Lib\Delphi$(CompilerV)) :ExpandEnvVar @ECHO OFF set %1=%~2 REM echo.ExpandEnvVar=%Text% EXIT /B :: Combines RegQuery and ExpandEnvVar then uses @SET :: Param 1: SubKey. :SetEnvVar @ECHO OFF CALL :RegQueryEnv Value %1 CALL :ExpandEnvVar Value "%Value%" @SET %~1=%Value% -
The myth of a working LSP server.. since before Godzilla 🙂
-
How does the "Address Space Randomization (ASLR)" actually work
FredS replied to Tommi Prami's topic in General Help
I don't have 11.2, but the fact that madExcept needed an update to deal with ASLR tells me its finally working. Redux: https://blog.marcocantu.com/blog/rad111_pe_security.html -
How does the "Address Space Randomization (ASLR)" actually work
FredS replied to Tommi Prami's topic in General Help
This hasn't worked for at least 11 years: https://www.codenewsfast.com/cnf/articles -
Update Subscription: Embarcadero policy seriously this bad?
FredS replied to Al T's topic in Delphi IDE and APIs
I didn't renew last February and in the good bye letter from EMBT there was something about being able to reactivate it.. I don't have it handy but pretty sure there was a period specified when it can be reactivated. Maybe you better clarify that with subscriptions.. -
Wouldn't it be simpler just to use ShellAPI and Windows to zip?
-
I can show you an example but most of my code uses internal stuff. But let me make one thing clearer; the action after Beyond Compare is manual NOT automatic.. In short, after comparing the prior db creation script with the new one methods within the Patching unit are called manually.. This example increase the Size of a [N]Varchar Column using UniDAC, FB3/4 and SqlServer dbs: /// <summary> /// Increase the Size of a [N]Varchar Column /// </summary> /// <param name="NullKind"> /// Must be given else some dbs default to allowing nulls when you make changes /// </param> class procedure TExecSqlPatch.IncVarChar(const Con: TUniConnection; const ATable, AColumn: string; const NewSize: Word; const NullKind: TNullKind); {$REGION 'History'} // 29-Aug-2018 - ExecuteSQL does not return any usefull count for these Block calls {$ENDREGION} var sql: string; begin case Con.DbProvider of dbFirebird: begin sql := 'EXECUTE block as BEGIN ' + ' if (exists(select 1 from RDB$RELATION_FIELDS rf where rf.RDB$RELATION_NAME = :TableName and rf.RDB$FIELD_NAME = :ColumnName))' + CRLF + ' then execute statement ' + 'ALTER TABLE :TableRaw ALTER COLUMN :ColumnRaw Type VARCHAR(:NewSize)'.ToQuoted + SEMICOLON + CRLF + 'END'; sql.ReplaceParams([ATable.ToUpper, AColumn.ToUpper, ParamRaw + ATable.ToUpper, ParamRaw + AColumn.ToUpper, NewSize]).Error.Assert; Con.ExecuteSQL(sql); sql := 'EXECUTE block as BEGIN ' + ' if (exists(select 1 from RDB$RELATION_FIELDS rf where rf.RDB$RELATION_NAME = :TableName and rf.RDB$FIELD_NAME = :ColumnName))' + CRLF + ' then execute statement ' + 'ALTER TABLE :TableRaw ALTER :ColumnRaw :NullKind NOT NULL'.ToQuoted + SEMICOLON + CRLF + 'END'; sql.ReplaceParams([ATable.ToUpper, AColumn.ToUpper, ParamRaw + ATable.ToUpper, ParamRaw + AColumn.ToUpper, ParamRaw + cFB3NullKind[NullKind]]).Error.Assert; Con.ExecuteSQL(sql); end; dbSQLServer: begin sql := 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] = :Table AND [COLUMN_NAME] = :Column) ' + CRLF + 'BEGIN ' + CRLF + ' ALTER TABLE :TableRaw ALTER COLUMN :ColumnRaw NVARCHAR(:NewSize) :NullKind ' + CRLF + 'END '; sql.ReplaceParams([ATable.ToUpper, AColumn.ToUpper, ParamRaw + ATable.ToUpper, ParamRaw + AColumn.ToUpper, NewSize, ParamRaw + cMSSQLNullKind[NullKind]]).Error.Assert; Con.ExecuteSQL(sql); end; else raise ENotImplemented.Create('Not Implemented'); end; end;
-
I wrapped most Alter statements into a 'SQL.Patching.pas' unit which fires what is needed depending on a version field at startup. Found the simplest way was to make all changes and then use Beyond Compare on the db creation script to generate an output which is used to call the methods in the Patching unit.
-
I've seen that change when the Windows license is changed.
-
Maybe you need to open the port in the Firewall(s)..
- 3 replies
-
- alexandria
- linux
-
(and 1 more)
Tagged with:
-
Adding this to the unit worked for me: {$RANGECHECKS OFF}
-
I don't use that unit, you'll need to figure out how searches are made using it.
-
Use ldap_search_sW
-
Use the ldap_bind_sW function (winldap.h)
-
Parnassus Bookmarks for Delphi 11 Alexandria?
FredS replied to PeterPanettone's topic in Delphi IDE and APIs
Sure, sometimes I use Notepad++ bookmarks and its Editor.. 🙂 -
IMO its best to stay away from those, still at least one open bug report RSP-17558, this one is the worst and nearly 5 years old: RSP-14723.
-
Several F2084 Internal Error on Delphi 10.4.2
FredS replied to Davide Angeli's topic in Delphi IDE and APIs
Or when you start using some of the IDE features meant to help you manage large projects.. -
DPI Awareness, tForm.CurrentPPI and PixelsPerInch not always identical !!???
FredS replied to A.M. Hoornweg's topic in VCL
I just type garbage for the first two now, then try and read that idiotic picture on the third one.. -
RSP-35486 TRttiField.SetValue breaks past bevaviour with Null and String
-
Async await with blocking mode using Application.ProcessMessage(var Msg: TMsg)
FredS replied to Nasreddine's topic in VCL
Not if you you code it to respond to the Classes.SyncEvent : https://stackoverflow.com/a/61022449 I use both, in one case I have many threads collecting data and triggering updates to a form while getting ready to launch another Task I don't want to pause the updates so a call gets wrapped in an Async which uses the trick above.. but I try to only do that for single calls that are guaranteed to take a short time. -
Async await with blocking mode using Application.ProcessMessage(var Msg: TMsg)
FredS replied to Nasreddine's topic in VCL
This scenario doesn't sound like it needs Async at all. Start a thread with an OnTerminate Event Disable all user input and show a busy signal When the thread completes the event fires and all reverts back to normal For the few cases that Async is needed there is `MsgWaitForMultipleObjects`..