The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,839 other subscribers

Archive for the ‘Software Development’ Category

Figuring out Windows Registry Permissions: AccessCheck

Posted by jpluimers on 2016/01/06

I had to verify the rights on some parts of the registry were the same for a lot of machines. So I used AccessChk by SysInternals.

If there were difference, my plan was to use REGINI to fix them.

It appears that AccessCheck does not show the permissions for objects within the specified path, not for the path itself.

As I observed that

accesschk -k hklm\software\Microsoft\Windows\Shell

does not reveal results.

But

accesschk -k hklm\software\Microsoft\Windows

shows:

Read the rest of this entry »

Posted in Batch-Files, Development, Power User, Scripting, Software Development, Windows, Windows 7, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 | Leave a Comment »

Handy new tool: GitHub Contributions Archive based on the GitHub Archive providing your github history

Posted by jpluimers on 2016/01/05

The GitHub Contributions Archive is based on the GitHub Archive (see below) and provides insight in anyones contributions. I discovered through a recent post by Ilya Grigorik:

Handy new tool (built on top of githubarchive.org dataset!) that aggregates all of your GitHub activity: bit.ly/1mraQyT.Apparently I’ve contributed to… – Ilya Grigorik – Google+

The GitHub Archive is amazing as it provides way more history than Github does by itself:

GitHub Archive is a project to record the public GitHub timeline, archive it, and make it easily accessible for further analysis.

Researching that data can provide tons of information, for instance about behaviour. It is also available through Google BigQuery so you can write your own queries for it.

The GitHub Contributions Archive – built by Liam Bowen – provides one (very usable) kind of insight: contributions, but there is much much more as quite some research, visualizations and talks have shown.

Interesting stuff!

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, GitHub, Power User, Software Development, Source Code Management | Leave a Comment »

finding and deleting Windows EFI partitions with wmic and diskpart

Posted by jpluimers on 2016/01/05

DiskMgmt.msc does not allow you to delete EFI partitions.

I tried with WMI first.

wmic has a nice assoc mode that allows you to find associated classes like the logical drive association to physical partitions.

But lets start simple: physical partitions and logical drives.

C:\temp>wmic partition get DeviceID, DiskIndex, Index, Type
DeviceID               DiskIndex  Index  Type
Disk #1, Partition #0  1          0      GPT: System
Disk #0, Partition #0  0          0      Installable File System

C:\temp>wmic logicaldisk get Caption, DriveType, FileSystem, ProviderName, VolumeName
Caption  DriveType  FileSystem  ProviderName  VolumeName
C:       3          NTFS
D:       5

These Associations:

They can be hard to use.

LogicalDisks are bound to a Partition, but a Partition does not need to have a Logical Disk.

I wanted the other way around: finding partitions not having a LogicalDisk association. But that does not seem to be possible with WMI at all.

Heck, detecting EFI partitions with WMI seems to be impossible.

DiskPart

Even though there needs to be a 15 second delay between DiskPart invocations:

you must allow at least 15 seconds between each script for a complete shutdown of the previous execution before running the DiskPart command again in successive scripts

it seems to be the only way to go.

But it is hard, as there seems to be no way to convert from volume (which lists the EFI partition as ESP), to disk+partition.

So a way to automate what How to delete a protected EFI disk partition with Windows 7 or 8 | WinAbility Software describes seems impossible.

Any thoughts on that?

This is what I have done so far

  1. diskpart
  2. list volume
    1. now note the volume that has ESP
  3. list disk
  4. for each disk
    1. select disk #
    2. list disk
      1. to confirm you selected the correct disk
    3. list partition
    4. select partiton #
    5. list partition
      1. to confirm you selected the correct partition
    6. list volume
      1. to confirm the partition indeeds corresponds to the EFI volume
    7. delete partition override
    8. list volume
    9. list partition
    10. for each partition coming after the EFI partition
      1. select partition #
      2. list partition
        1. to confirm
      3. delete partition
      4. list partition
        1. to confirm

Now you can create a new partition on the disk.

–jeroen

via:

Posted in Batch-Files, Development, Power User, Scripting, Software Development, Windows | Leave a Comment »

From my paper archives: early QuickReport materials and BDE network installation tips

Posted by jpluimers on 2016/01/01

[WayBack] While cleaning up my “attic”, I came across some old QuickReport 1.0 documents and BDE installation tips so I scanned them.

I think the first document is by this Lars Søndergaard.

The last is by Dave Robinson, then working at Amber Computer Systems Inc, but I could not find on-line activity of him If you know him, please let me know his on-line contact info.

–jeroen

Posted in Delphi, Delphi 1, Development, History, Software Development | 2 Comments »

Disable screensaver using registry settings

Posted by jpluimers on 2015/12/30

This is what I needed:

:: http://www.windows-commandline.com/disable-screensaver-registry-settings/
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 0 /f

And this one to verify the current settings:

:: http://www.windows-commandline.com/disable-screensaver-registry-settings/
:: possible names
:: ScreenSaveActive
:: ScreenSaveTimeOut
:: ScreenSaverIsSecure
reg query "HKEY_CURRENT_USER\Control Panel\Desktop" | findstr /I /C:"ScreenSave"

–jeroen

via:

Posted in Batch-Files, Development, Scripting, Software Development | Leave a Comment »

Command Line Kung Fu: Episode #43: Users & Groups

Posted by jpluimers on 2015/12/29

I needed to compare the local group memberships on a few systems.

I knew there is the distinction between

  • net group (which despite documentation requires /domain as it does not support local groups: you get a nice NET HELPMSG 3515 error) and
  • net localgroup (which can either run locally or with /domain).

So I came up with this batch file thanks to Command Line Kung Fu:

:: http://blog.commandlinekungfu.com/2009/06/episode-43-users-groups.html
for /F "skip=4 delims=*" %%g in ('net localgroup ^| find /v "The command completed successfully"') do @net localgroup "%%g"

It can be done in PowerShell too, but is more work.

Based on that and Beyond Compare I created some diff scripts.

–jeroen

via:

Posted in Batch-Files, Development, Scripting, Software Development | 1 Comment »

Windows applications: Icons and the Shell; names, sizes, etc.

Posted by jpluimers on 2015/12/23

When adding Icons to your Windows applications a few things matter.

Selecting the icon resource

The icon selected by the Windows Shell (for modern Windows versions usually Windows Explorer), is the one with the lowest ID. When there is no icon with an ID, it selects the icon with the lowest name.

Icons in Windows can have both IDs and names. Even though API calls like LoadIcon have an lpIconName parameter, you can convert the ID to a name using MAKEINTRESOURCE.

There is a difference between the format of an ICO file and the icon resource (technically two things: RT_GROUP_ICON resource directory and an RT_ICON resource for each image) contains a list of icon images.

The selection process is on the RT_GROUP_ICON, and then within the group on the ICON itself.

For the RT_GROUP_ICON process, modern Windows versions still use the algorithm used by Windows 95 (not that by Windows NT):

Windows NT simply chooses the first resource listed in the application’s RC script. On the other hand, Windows 95’s algorithm is to choose the alphabetically first named group icon if one exists. If one such group resource does not exist, Windows chooses the icon with the numerically lowest identifier.

For a Delphi application the icon shown must be named MAINICON, since the below source fragment has been in TApplication.Create(…) like forever:

FIcon.Handle := LoadIcon(MainInstance, 'MAINICON');

Which means that if you want the Windows Shell (usually Explorer) to select that one, all other icon resources in your executable must have names that sort after MAINICON.

Selecting the icon within a resource

For the individual icon, the process is more complex. Even the summary is. To summarise the summary to select an icon for the requested size:

  1. Prefer the image closest in size.
  2. When more images of that size are present, match on the best color depth for the display.
  3. When no color depth matches, prefer the image with the greatest color depth not exceeding the color depth of the display.
  4. When all exceed the color depth, prefer the lowest color depth.

For color depth, treat 8 or more bits per pixel as equal. So there is no advantage of including a 16×16 256-color image and a 16×16 16-color image in the same resource — the system will simply choose the first one it encounters. When the display is in 8-bpp mode, the system will choose a 16-color icon over a 256-color icon, and will display all icons using the system default palette.

I’m not completely confident how 32-bit precisely fits in this scheme. If someone knows, please let me know and I’ll include the information.

I usually take 32-bit color images here which are actually True Color 24-bit + alpha channel RGBA images.

What about requested size?

Actually there are a lot of sizes that Windows can request, and there are many articles about it, some of which contradict each other.

From what I assembled, these are the sizes you need to run on Windows XP / Server 2003 and up:

  • 16×16
  • 20×20
  • 24×24
  • 32×32
  • 40×40
  • 48×48
  • 64×64
  • 96×96
  • 128×128
  • 256×256 (for Windows XP / Server 2003: do not compress this size)

I might be wrong, so here are some links:

–jeroen

via:

Posted in .NET, Delphi, Development, Software Development, The Old New Thing, Windows Development | Leave a Comment »

Delphi 10 Seattle version numbers

Posted by jpluimers on 2015/12/22

The ones I know, hopefully they are the only ones as search results are inconclusive:

–jeroen

XE9

Posted in Delphi, Delphi 10 Seattle, Development, Software Development | 1 Comment »

How to verify app signatures in OS X | MacIssues

Posted by jpluimers on 2015/12/18

Interesting:

For codesign verification:

find /Applications -d 1 -name "*.app" -exec codesign --verify --verbose {} \;

For system policy assessment:

find /Applications -d 1 -name "*.app" -exec spctl --assess --verbose {} \;

–jeroen

Source: How to verify app signatures in OS X | MacIssues

Posted in Apple, bash, Development, Mac, Mac OS X / OS X / MacOS, Mac OS X 10.6 Snow Leopard, MacBook, MacBook Retina, MacBook-Air, MacBook-Pro, MacMini, OS X 10.10 Yosemite, OS X 10.8 Mountain Lion, OS X 10.9 Mavericks, Power User, Scripting, Software Development | Leave a Comment »

Some links on DUnit test cases and test suites, XML and XSD

Posted by jpluimers on 2015/12/17

DUnit registration can mix TestSuites and TestCases.

Some links:

–jeroen

 

 

 

 

Posted in Agile, Delphi, Delphi 10 Seattle, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development, Unit Testing | Leave a Comment »