Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Доступ через лок сеть. Сетевая и локальная версии


Автор: AbekIn3D 12.1.2010, 12:12
Добры всем день!

1. Как сделать так, чтобы программу не могли открыть через локальную сеть? 
Т.е. пользователь установил ПО себе на компьютер, а сетевые пользователи не могли запустить ее через локальную сеть.

2. И еще, как делаются сетевые и локальные версии?
Заранее спасибо

Автор: Демо 12.1.2010, 13:02
Цитата(AbekIn3D @  12.1.2010,  12:12 Найти цитируемый пост)
Т.е. пользователь установил ПО себе на компьютер, а сетевые пользователи не могли запустить ее через локальную сеть.


Для этого надо проверить, что путь запуска находится на локальном, а не сетевом диске.

Вот как неализовано получения типа логического диска в  TDriveComboBox:

Код

procedure TDriveComboBox.BuildList;
var
  DriveNum: Integer;
  DriveChar: Char;
  DriveType: TDriveType;
  DriveBits: set of 0..25;

  procedure AddDrive(const VolName: string; Obj: TObject);
  begin
    Items.AddObject(Format('%s: %s',[DriveChar, VolName]), Obj);
  end;

begin
  { fill list }
  Clear;
  Integer(DriveBits) := GetLogicalDrives;
  for DriveNum := 0 to 25 do
  begin
    if not (DriveNum in DriveBits) then Continue;
    DriveChar := Char(DriveNum + Ord('a'));
    DriveType := TDriveType(GetDriveType(PChar(DriveChar + ':\')));
    if TextCase = tcUpperCase then
      DriveChar := Upcase(DriveChar);

    case DriveType of
      dtFloppy:   Items.AddObject(DriveChar + ':', FloppyBMP);
      dtFixed:    AddDrive(VolumeID(DriveChar), FixedBMP);
      dtNetwork:  AddDrive(NetworkVolume(DriveChar), NetworkBMP);
      dtCDROM:    AddDrive(VolumeID(DriveChar), CDROMBMP);
      dtRAM:      AddDrive(VolumeID(DriveChar), RAMBMP);
    end;
  end;
end;


Автор: Keeper89 12.1.2010, 13:55
А если просто проверить ParamStr(0) на наличие '\\?

Автор: AbekIn3D 12.1.2010, 14:01
объясните, как это будет работать?smile

Автор: Keeper89 12.1.2010, 15:14
AbekIn3D, 
При запуске приложения проверяем, запущено оно с локального диска или с сетевого. Если второе - то выходим и можем что-нибудь написать пользователю типа "Для использования ПО по сети приобретите сетевую версию".

Автор: AbekIn3D 12.1.2010, 17:18
я новичок в этом деле smile 
Код
if AnsiPos(ParamStr(0), '//') <> 0 then
   show message('Buy this product')
else
  showmessage('Thank you!');

Так?

Автор: Keeper89 12.1.2010, 17:34
Да, совсем примитивно как то так.

З.Ы. Только слеши обратные.

Автор: ~FoX~ 12.1.2010, 18:15
Цитата(AbekIn3D @  12.1.2010,  18:18 Найти цитируемый пост)
Так? 

Не подойдет, если сетевой диск при монтирован, то parmstr не вернет тебе "\\"

Добавлено @ 18:28
Код

uses FileCtrl;
//..............
procedure TForm1.FormCreate(Sender: TObject);
var
  DriveType: TDriveType;
  DriveLetter: PChar;
begin
  DriveLetter := PwideChar(ExtractFileDrive(Application.ExeName));
  DriveType := TDriveType(GetDriveType(DriveLetter));
  if DriveType = dtFixed then ShowMessage('Thank you!')
  else ShowMessage('Buy this product');
end;

Автор: AbekIn3D 12.1.2010, 19:40
Код
DriveLetter := PwideChar(ExtractFileDrive(Application.ExeName));

пишет [Error] Unit1.pas(30): Incompatible types: 'WideChar' and 'Char'

Автор: ~FoX~ 12.1.2010, 20:32
Цитата(AbekIn3D @  12.1.2010,  20:40 Найти цитируемый пост)
пишет [Error] Unit1.pas(30): Incompatible types: 'WideChar' and 'Char' 

Ну замени PwideChar на PChar

Автор: AbekIn3D 13.1.2010, 07:54
Спасибо всем большое!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)