MyProgram is inheriting the "Creator Owner" and Users ACLs from ProgramData which is limiting access.
When you create the MyProgram folder, you have to set the permissions on it to define how users can access the files.
C:\>icacls c:\ProgramData\
c:\ProgramData\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
CREATOR OWNER:(OI)(CI)(IO)(F)
BUILTIN\Users:(OI)(CI)(RX)
BUILTIN\Users:(CI)(WD,AD,WEA,WA)
Successfully processed 1 files; Failed processing 0 files
C:\>md c:\ProgramData\MyProgram
C:\>icacls c:\ProgramData\MyProgram
c:\ProgramData\MyProgram NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(WD,AD,WEA,WA)
Successfully processed 1 files; Failed processing 0 files
C:\>
Note that the permissions on MyProgram all have "(I)" which indicates an inherited ACL which was defined on ProgramData.
The simple solution is to remove ACL inheritance and just grant Users full control. That may or may not be a security risk, it all depends on what your requirements are.
icacls.exe c:\ProgramData\MyProgram /grant "NT AUTHORITY\SYSTEM:(OI)(CI)(F)" /grant "BUILTIN\Administrators:(OI)(CI)(F)" /grant "BUILTIN\Users:(OI)(CI)(F)" /inheritance:r
It would look like this.
C:\>icacls.exe c:\ProgramData\MyProgram /grant "NT AUTHORITY\SYSTEM:(OI)(CI)(F)" /grant "BUILTIN\Administrators:(OI)(CI)(F)" /grant "BUILTIN\Users:(OI)(CI)(F)" /inheritance:r
processed file: c:\ProgramData\MyProgram
Successfully processed 1 files; Failed processing 0 files
C:\>icacls c:\ProgramData\MyProgram
c:\ProgramData\MyProgram BUILTIN\Users:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(F)
Successfully processed 1 files; Failed processing 0 files
C:\>