2013-05-25 5 views
2

Я написал программу, использующую IdHTTP и IdFTP, но у меня есть проблема. Я написал его на Windows XP 32 бит (используя Delphi XE4), и exe-файл (Project1.exe) отлично работает. Когда я пытаюсь открыть его на Windows 7 64 бит, компьютер дает мне ошибку.Не удается запустить win32 exe на windows 7

Изображение: click

Это означает, что «Вы не можете Acces на пути или указанного файла Возможно, вы не имеете достаточных прав.». Я никогда не видел эту ошибку раньше. Здесь вы можете увидеть изображение папки с исходным кодом.

Как я могу решить свою проблему?

Вот код:

function downloadSrc(var aUrl:ansiString):ansiString; 
begin 
with tIdHttp.create(nil) do begin  //Create Indy http object 
    request.userAgent:=INET_USERAGENT;  //Custom user agent string 
    redirectMaximum:=INET_REDIRECT_MAX;  //Maximum redirects 
    handleRedirects:=INET_REDIRECT_MAX<>0; //Handle redirects 
    readTimeOut:=INET_TIMEOUT_SECS*1000; //Read timeout msec 
    try          //Catch errors 
    result:=get(aUrl);      //Do the request 
    if url.port='80' then url.port:=''; //Remove port 80 from final URL 
    aUrl:=url.getFullURI     //Return final URL 
    except result:='error' end;    //Return an error message if failed 
    free         //Free the http object 
end 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
var i:integer; 
begin 
if not(DirectoryExists('C:\mk7vrlist')) then 
begin 
    CreateDir('C:\mk7vrlist'); 
end; 
ComboBox1.Items.BeginUpdate; 
for i := 0 to 59 do 
    begin 
    ComboBox1.AddItem(IntToStr(40000+i*1000), nil); 
    end; 
ComboBox1.AddItem('99999', nil); 
ComboBox1.Items.EndUpdate; 
end; 

procedure TForm1.Label5Click(Sender: TObject); 
begin 
ShellExecute(self.WindowHandle,'open',PChar('http://www.mk7vrlist.altervista.org'),nil,nil,SW_SHOWNORMAL); 
end; 

procedure TForm1.SpeedButton1Click(Sender: TObject); 
var s:ansiString; 
begin 
IdFTP1.Host:= 'mk7vrlist.altervista.org'; 
IdFTP1.Username:='mk7vrlist'; 
IdFTP1.Password:=pass; 
IdFTP1.Connect; 
s:='http://www.mk7vrlist.altervista.org/databases/test.txt'; 
Memo1.Lines.Add(Edit1.Text+':'+ComboBox1.Text+':'+Edit2.Text); 
Memo1.Lines.Add(downloadSrc(s)); 
Memo1.Lines.SaveToFile('C:\mk7vrlist\test.txt'); 
IdFTP1.ChangeDir('databases/'); 
IdFTP1.Put('C:\mk7vrlist\test.txt'); 
IdFTP1.Quit; 
IdFTP1.Disconnect; 
Label10.Visible:=True; 
Beep; 
end; 
+0

Это проблема разрешения NTFS File, МОС вероятно. Программа читает какой-то другой файл и дает вам эту ошибку? Или эта ошибка происходит ПОСЛЕ запуска вашей программы, и она пытается прочитать что-то еще на вашем компьютере? Вы ничего не сказали о том, что на локальном компьютере эта программа обращается. Кроме того, более удобно поместить текст чисто текстового сообщения прямо в ваш вопрос. Вы можете нажать Ctrl-C, а затем использовать google translate для получения английского текста. –

+0

Вы пытаетесь писать на обычных C: \ или папках, таких как ProgramDir? – bummi

+0

Программа загружает текстовый файл на моем сервере с помощью winlnet и сохраняет текст в c: \ folder1 \ folder2 \ textfile.txt –

ответ

3

Предполагая, что ваша учетная запись обладает правами администратора, щелкните правой кнопкой мыши на иконку вашей программы, и вызвать «Запуск от имени администратора» - вы получите запрос/предупрежден - нажмите Да.

Я не считаю, что проблема 32-> 64-битная, но переход от XP к Win 7, которая по умолчанию более конкретно касается доступа.

Вы можете настроить ярлык, настроенный всегда для запуска его как администратора, чтобы избежать шага правого щелчка, но вы все равно получите запрос/предупреждение.

+0

Это более быстрый способ подтвердить, является ли причиной ошибки разрешения файловой системы. – OnTheFly

+0

Когда наша среда dev на работе мигрировала с XP на Win 7, сначала у меня было много подобных проблем. Sys admin сказал мне использовать «запустить как администратор вариант» - с тех пор никаких проблем. – Vector

+1

Не могу согласиться с последним изменением, работа над приложением повышенная, является хорошей диагностической идеей, чтобы подтвердить, какая неясная ошибка на итальянском языке действительно вызвана ACL-файлами f/s, но никоим образом не является хорошим постоянным решением. – OnTheFly

0

CreateDir ('C: \ mk7vrlist)

Обычные пользователи не имеют такого рода доступа к C: \

ли что-то вроде этого вместо (псевдо-код) :

CreateDir ("% Temp% \ mk7vrlist)

+0

'CreateDir' не расширяет'% temp% ', поэтому это не сработает. Вам необходимо правильно спросить папку «Temp» с помощью API. –

+0

@KenWhite Примечание «псевдокод», отмеченный выше ... – Jonesome

+0

Я это заметил. Вот почему я не спустил вниз. :-) Но это не совсем ответ; это скорее комментарий. Ответы обеспечивают решение проблемы, и «делать что-то вроде этого псевдокода» не дает. –

Смежные вопросы