У меня есть файл *.exe в \ProgramFiles (x86)\MyAppFolder.
В приложении x86 я проверяю, существует ли файл (64-разрядная система). простой:
bool fileExists = File.Exists(@"\ProgramFiles(x86)\MyAppFolder\Manager.exe");
Результат: "fileExists == false" (файл действительно есть). Это виртуализация, как я понимаю. Эта проблема описана здесь Ее хорошо. Но следующий код:
bool fileExists = new FileInfo("\\Path").Exists;
"fileExists == true"
Почему результат отличается от 1-го и 2-го случаев?
var controller = new ServiceController(Product.ServiceName);
_manager.Enabled = controller.Status == ServiceControllerStatus.Running;
var info = new DirectoryInfo(Assembly.GetExecutingAssembly().Location);
var s = File.Exists(@"D:\TFS\GL_SOURCES\Teklynx_LPM\Dev\Server\Debug\Manager.exe");
string pathToManager = string.Empty;
if (info.Parent != null)
{
var pathToModule = info.Parent.FullName;
pathToManager = Path.Combine(pathToModule,"Manager.exe").Replace(" ",string.Empty);
}
//работает хорошо
var fileInfo = new FileInfo(pathToManager);
var managerSeparator = new ToolStripSeparator()
{
Visible = _manager.Visible = fileInfo.Exists // true
};
//Не работает
var managerSeparator = new ToolStripSeparator()
{
Visible = _manager.Visible = File.Exists(pathToManager ) // false
};
Спасибо!