| 
| 
 | Вопрос # 4 974/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!
 У меня есть прога. Пишется в Дельфи2010 на ВинХР. Тут все работает.
 Но стоило запустить ее на Вин7, как работать перестала. Но если
 запустить на Вин7 в режиме совместимости с ВинХР, то работает.
 Прога работает с реестром и COM-портами, в т.ч. виртуальными.
 Обмен с прибором через преобразователь на базе чипа FTDI.
 Как сделать, чтобы работала без включения режима совместимости?
 Или включать его самому, чтобы не привлекать к этому юзера.
 
 Заранее спасибо!
 
|  |   Вопрос задал: Muratov Radik (статус: Посетитель)Вопрос отправлен: 28 января 2011, 11:37
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: amber Здравствуйте, Muratov Radik!Если есть возможность, установите делфи в Вин7 - это упростит процесс поиска ошибки в программе. Возможно Ваша программа использует напрямую или через VCL API функции, которые есть в XP, но которых нет в 7 либо они существенно изменены. Для решения данной проблемы рекомендую найти справку по API функциям работающих с COM портами в Win7. Сомневаюсь, что ошибка возникает при работе с реестром, поскольку изменения API в этой области в Win7 минимальны.
 
 P.S. Было бы проще, если бы Вы привели текст ошибки. В большинстве своём программы отказываются работать в этой системе из за изменений в библиотеках самой системы, потому рекомендую внимательно изучить руководство по API в Win7.
 
|  | Ответ отправил: amber (статус: 1-ый класс)Время отправки: 2 февраля 2011, 13:28
 
 |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 2 февраля 2011, 18:20; участников в обсуждении: 5. 
|   | min@y™ (статус: Доктор наук), 28 января 2011, 11:57 [#1]: Цитата (Muratov Radik): Но стоило запустить ее на Вин7, как работать перестала. Конечно, мы тут все телепаты, сразу угадаем, как ведёт себя прога под вин 7, какие сообщения об ошибках выдаёт, какие записи в системном журнале появляются и т.д.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 28 января 2011, 12:31 [#2]:Проще отказаться от Вин7. Да, именно отказаться. Либо изучить, как подымать себе привилегии, как их корректно запрашивать у системы, как составить файл манифеста. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Muratov Radik (статус: Посетитель), 28 января 2011, 13:23 [#3]:Вадим К: Отказаться нереально. Все больше людей пересаживатеся на 7ку. Да и на ноутах она идет предустановленная. Подкажите куда копать по обозначенным Вами позициям? min@y™: Вы правы, постановка вопроса абстрактная. Исправляюсь:
 
 function TMainForm.PortFind(var devCount: integer): integer;
var
  reg : TRegistry;
  ts : TStrings;
  i : integer;
  l_FP: integer;
begin
  Result := 1;
  logMemo.Lines.Add('Пытаемся получить доступ к реестру');
try
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('hardware\devicemap\serialcomm', false);
    ts  := TStringList.Create;
    reg.GetValueNames(ts);
    // сначала проверим, вдруг в данный момент активно несколько вирт.портов
    l_FP := 0;
    for i := 0 to ts.Count -1 do
     if Pos('VCP', UpperCase(ts.Strings[i])) > 0
      then l_FP := l_FP + 1;
    if l_FP > 1 then
     begin
       devCount := l_FP;
       Exit;
     end;
 
    l_FP := 1;
    for i := 0 to ts.Count -1 do
    begin
     logMemo.Lines.Add(ts.Strings[i]);
      if ts.Strings[i] = '\Device\VCP0' then
        begin
          l_FP := StrToInt(StringReplace(reg.ReadString(ts.Strings[i]), 'COM', '',
                            [rfReplaceAll, rfIgnoreCase]));
          break;
        end;
    end;
except
  ts.Free;
  reg.CloseKey;
  reg.free;
  logMemo.Lines.Add('Ошибка доступа к реестру');
end;
  ts.Free;
  reg.CloseKey;
  reg.free;
  logMemo.Lines.Add('Доступ к реестру получен');
  result := l_FP;
end;Перестала работать эта функция. Вернее она "работает", ошибок никаких не возникает, просто она не находит номер COM-порта.
 В ХР она выводит в мемо список всех портов, а в 7 нет.
 |  
|   | Muratov Radik (статус: Посетитель), 28 января 2011, 13:29 [#4]:Еще размер файла возвращает равным -1. Хотя файл есть и он нормальный 
 procedure TChangeWordBankCOMForm.OpenBtnClick(Sender: TObject);
var
  FHandle: Integer;
  FLength: Integer;
begin
  StatusBar.Panels[1].Text:= '';
  OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  if OpenDialog1.Execute then
    if FileExists(OpenDialog1.FileName) then
    begin
      //---------------------------------------------
      FHandle := FileOpen(FName, fmOpenRead);
      FLength := FileSeek(FHandle,0,2);
      FileClose(FHandle);
      Label3.Caption := IntToStr(FLength); // + ' bytes';
      //---------------------------------------------
      ProgressBar1.Min := 0;
      ProgressBar1.Max := FLength;
      ProgressBar1.Position := 0;
    end;
end; |  
|   | Вадим К (статус: Академик), 28 января 2011, 14:03 [#5]:Muratov Radik: Отказаться реально. Если нужно перепрошивать контроллеры или что там ещё делается по com порту, то севен тут сложнее для работы. Если запустить программу с админскими привелегиями, то все работает?
 Размер файла может возвращать -1, если к файлу нет доступа.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | mirt.steelwater (статус: Посетитель), 28 января 2011, 15:13 [#6]:100% проблема с правами на чтение списка портов переходи на unix-системы
 там права - это права, а не рюшки
 Ⓐ свобода сопротивление солидарность |  
|   | Muratov Radik (статус: Посетитель), 28 января 2011, 15:23 [#7]:проблема решилась проще, чем ожидалось. Надо запускать прогу по правой кнопкой мыши и там выбрать Запуск от имени администратора. Хотя конечно это тоже не очень удобно. Видимо все-таки манифесты надо копать
 |  
|   | Егор (статус: 10-ый класс), 28 января 2011, 15:34 [#8]:на мсдн-е была статья, которая примерно так и называлась - "особенности программирования под вин7" или "отличия в программировании под вин7 и вин хр". ссылку не подскажу - не помню Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Muratov Radik (статус: Посетитель), 2 февраля 2011, 16:59 [#9]:На русском мсдн-е? |  
|   | Егор (статус: 10-ый класс), 2 февраля 2011, 18:20 [#10]:нет, на майкрософте. и статья была на английском Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |