Why does my Delphi application say a file exists that is not there? [duplicate]
This question already has an answer here:
Why do files get placed in “C:Users<username>AppDataLocalVirtualStoreProgram Files(x86)”?
2 answers
I have the following 32bit Delphi project source:
program TestApp;
uses
SysUtils, Dialogs, Windows;
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
When I run it, both the Windows API FindFirst call and the FileExists call return True, even though the file does not exist in that directory.
Why is it claiming a file is there when it is not?
windows delphi
marked as duplicate by David Heffernan
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 22:48
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
Why do files get placed in “C:Users<username>AppDataLocalVirtualStoreProgram Files(x86)”?
2 answers
I have the following 32bit Delphi project source:
program TestApp;
uses
SysUtils, Dialogs, Windows;
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
When I run it, both the Windows API FindFirst call and the FileExists call return True, even though the file does not exist in that directory.
Why is it claiming a file is there when it is not?
windows delphi
marked as duplicate by David Heffernan
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 22:48
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20
add a comment |
This question already has an answer here:
Why do files get placed in “C:Users<username>AppDataLocalVirtualStoreProgram Files(x86)”?
2 answers
I have the following 32bit Delphi project source:
program TestApp;
uses
SysUtils, Dialogs, Windows;
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
When I run it, both the Windows API FindFirst call and the FileExists call return True, even though the file does not exist in that directory.
Why is it claiming a file is there when it is not?
windows delphi
This question already has an answer here:
Why do files get placed in “C:Users<username>AppDataLocalVirtualStoreProgram Files(x86)”?
2 answers
I have the following 32bit Delphi project source:
program TestApp;
uses
SysUtils, Dialogs, Windows;
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
When I run it, both the Windows API FindFirst call and the FileExists call return True, even though the file does not exist in that directory.
Why is it claiming a file is there when it is not?
This question already has an answer here:
Why do files get placed in “C:Users<username>AppDataLocalVirtualStoreProgram Files(x86)”?
2 answers
windows delphi
windows delphi
edited Nov 28 '18 at 14:34
jep
asked Nov 27 '18 at 22:05
jepjep
427222
427222
marked as duplicate by David Heffernan
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 22:48
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by David Heffernan
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 22:48
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20
add a comment |
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20
add a comment |
1 Answer
1
active
oldest
votes
The file exists in the VirtualStore directory located in
C:Users{username}AppDataLocalVirtualStoreProgram Files (x86)
This is a feature called UAC Virtualization first introduced in Windows Vista. It allows applications to write to restricted directories that they otherwise have no permissions to. When a 32 bit application with UAC Virtualization enabled writes to the real directory and would receive an access denied result, Windows instead creates a copy of the file in the VirtualStore .
When this application or another 32 bit application with UAC Virtualization enabled tries to read from the file, it will first check the VirtualStore for the file. You can see that UAC Virtualization is Enabled by adding this column in Task Manager.
This happens in a Delphi program when you remove the {$R *.res}
directive. If you change the project source to add the {$R *.res}
directive back in
program TestApp;
uses
SysUtils, Dialogs, Windows;
{$R *.res}
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
it will recognize your app as having UAC Virtualization disabled (as is the norm for most applications). You can see that in Task Manager, and the results of the file finding operations will be what you expect.
The reason why leaving out the .RES file causes this is that it includes a manifest. The following line in this manifest disables UAC Virtualization:
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
When level is omitted, UAC Virtualization is enabled.
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.
– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The file exists in the VirtualStore directory located in
C:Users{username}AppDataLocalVirtualStoreProgram Files (x86)
This is a feature called UAC Virtualization first introduced in Windows Vista. It allows applications to write to restricted directories that they otherwise have no permissions to. When a 32 bit application with UAC Virtualization enabled writes to the real directory and would receive an access denied result, Windows instead creates a copy of the file in the VirtualStore .
When this application or another 32 bit application with UAC Virtualization enabled tries to read from the file, it will first check the VirtualStore for the file. You can see that UAC Virtualization is Enabled by adding this column in Task Manager.
This happens in a Delphi program when you remove the {$R *.res}
directive. If you change the project source to add the {$R *.res}
directive back in
program TestApp;
uses
SysUtils, Dialogs, Windows;
{$R *.res}
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
it will recognize your app as having UAC Virtualization disabled (as is the norm for most applications). You can see that in Task Manager, and the results of the file finding operations will be what you expect.
The reason why leaving out the .RES file causes this is that it includes a manifest. The following line in this manifest disables UAC Virtualization:
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
When level is omitted, UAC Virtualization is enabled.
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.
– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
add a comment |
The file exists in the VirtualStore directory located in
C:Users{username}AppDataLocalVirtualStoreProgram Files (x86)
This is a feature called UAC Virtualization first introduced in Windows Vista. It allows applications to write to restricted directories that they otherwise have no permissions to. When a 32 bit application with UAC Virtualization enabled writes to the real directory and would receive an access denied result, Windows instead creates a copy of the file in the VirtualStore .
When this application or another 32 bit application with UAC Virtualization enabled tries to read from the file, it will first check the VirtualStore for the file. You can see that UAC Virtualization is Enabled by adding this column in Task Manager.
This happens in a Delphi program when you remove the {$R *.res}
directive. If you change the project source to add the {$R *.res}
directive back in
program TestApp;
uses
SysUtils, Dialogs, Windows;
{$R *.res}
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
it will recognize your app as having UAC Virtualization disabled (as is the norm for most applications). You can see that in Task Manager, and the results of the file finding operations will be what you expect.
The reason why leaving out the .RES file causes this is that it includes a manifest. The following line in this manifest disables UAC Virtualization:
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
When level is omitted, UAC Virtualization is enabled.
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.
– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
add a comment |
The file exists in the VirtualStore directory located in
C:Users{username}AppDataLocalVirtualStoreProgram Files (x86)
This is a feature called UAC Virtualization first introduced in Windows Vista. It allows applications to write to restricted directories that they otherwise have no permissions to. When a 32 bit application with UAC Virtualization enabled writes to the real directory and would receive an access denied result, Windows instead creates a copy of the file in the VirtualStore .
When this application or another 32 bit application with UAC Virtualization enabled tries to read from the file, it will first check the VirtualStore for the file. You can see that UAC Virtualization is Enabled by adding this column in Task Manager.
This happens in a Delphi program when you remove the {$R *.res}
directive. If you change the project source to add the {$R *.res}
directive back in
program TestApp;
uses
SysUtils, Dialogs, Windows;
{$R *.res}
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
it will recognize your app as having UAC Virtualization disabled (as is the norm for most applications). You can see that in Task Manager, and the results of the file finding operations will be what you expect.
The reason why leaving out the .RES file causes this is that it includes a manifest. The following line in this manifest disables UAC Virtualization:
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
When level is omitted, UAC Virtualization is enabled.
The file exists in the VirtualStore directory located in
C:Users{username}AppDataLocalVirtualStoreProgram Files (x86)
This is a feature called UAC Virtualization first introduced in Windows Vista. It allows applications to write to restricted directories that they otherwise have no permissions to. When a 32 bit application with UAC Virtualization enabled writes to the real directory and would receive an access denied result, Windows instead creates a copy of the file in the VirtualStore .
When this application or another 32 bit application with UAC Virtualization enabled tries to read from the file, it will first check the VirtualStore for the file. You can see that UAC Virtualization is Enabled by adding this column in Task Manager.
This happens in a Delphi program when you remove the {$R *.res}
directive. If you change the project source to add the {$R *.res}
directive back in
program TestApp;
uses
SysUtils, Dialogs, Windows;
{$R *.res}
var
filename: String = 'C:Program Files (x86)Some Applicationfoo.txt';
fd: TWIN32FindData;
h: THandle;
begin
FillChar(fd, SizeOf(fd), 0);
h := FindFirstFile(PChar(filename), fd);
if h = INVALID_HANDLE_VALUE then
ShowMessage('FindFirstFile=false')
else
begin
ShowMessage('FindFirstFile=true');
FindClose(h);
end;
if FileExists(filename) then
ShowMessage('FileExists=true')
else
ShowMessage('FileExists=false');
end.
it will recognize your app as having UAC Virtualization disabled (as is the norm for most applications). You can see that in Task Manager, and the results of the file finding operations will be what you expect.
The reason why leaving out the .RES file causes this is that it includes a manifest. The following line in this manifest disables UAC Virtualization:
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
When level is omitted, UAC Virtualization is enabled.
edited Nov 28 '18 at 14:34
answered Nov 27 '18 at 22:05
jepjep
427222
427222
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.
– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
add a comment |
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.
– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
1
1
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
This can't be discerned from the question that was asked. It's also a rather tired subject. UAC is 13 years old now. Surely we don't need more posts on the subject. Let's see if I can find some dupes.
– David Heffernan
Nov 27 '18 at 22:47
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the
{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.– jep
Nov 28 '18 at 5:39
Well, that's a shame. I basically lost a day to this issue. The problem isn't that there's another question about UAC VIrtualization, it's that if you make the mistake of removing the
{$R *.res}
line in Delphi, you wind up with this very opaque problem. It's a very easy trap to stumble into but difficult to find the right answer. Had this Q & A been here, it would have been quite easy for me to have found the answer and saved most of my day. So I was attempting to pay it forward.– jep
Nov 28 '18 at 5:39
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
Thanks. Nevertheless, probably because you already know the solution, the question came out to be vague - which indeed you cant discern this answer from. With so many copy/paste errors (!) seen on the site, it's not very clear that the directive is missing. It's not even clear if the code is 32 bit or not. Normally to find a solution for such a question, a fair amount of question/answer game is played in comments.
– Sertac Akyuz
Nov 28 '18 at 12:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
I'm surprised it's not clear that the directive is missing, as I stated that right before the second block of code. I can touch that up to make it even clearer. The question was pretty specific in that this was the behavior being seen. I had a Delphi app claiming a file was there that was not. I found this baffling, as I had never heard of UAC Virtualization. Neither had the other lead programmer. Both of us have been coding for Delphi for 20 years. It's just not something that comes up because in most cases the user doesn't write to the Program Files directory.
– jep
Nov 28 '18 at 14:31
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
But in this case, we're required by our client to do so. And we didn't notice it while testing on the client because they had those permission set up to allow the right. It only happened on a developers machine because they had normally set up permissions. So they ran the app and it checked for a file existing and created it when it didn't. But the OTHER app that depended on that file being there failed, because it wasn't using UAC Virtualization. I will also add in the description that it was 32bit. But without knowing the answer first, that bit doesn't make much sense to someone asking.
– jep
Nov 28 '18 at 14:33
add a comment |
Note that though this has been marked as a duplicate of the another question, that question actually assumes you know the answer BEFORE you ask the question.
– jep
Dec 3 '18 at 14:20