Newsgroup: it.comp.lang.delphi
Titolo: Teamsource

Sto valutando Teamsource, premetto che avevo provato tempo fa FreeVCS, ma mi
sono fermato quasi subito perché non permetteva il confronto a tre tra i
file.
Quello che mi interessa è avere una storia dei sorgenti con le modifiche e
su questo non ci dovrebbero essere problemi, il secondo punto è che devo
riconciliare le modifiche fatte da me e il "resto del mondo" e per fare
questo però devo loggarmi su windows con due utenti diversi, il che è una
bella rottura. Non c'è da qualche parte la possibilità di far uscire una
maschera di login con cui mi autentico di volta in volta con l'utente che mi
serve?
Grazie

 autentico di volta in volta con l'utente che mi serve?
Utilizzando le API LogonUser e CreateProcessAsUser puoi lanciare un
processo come un utente differente, potrebbe esserti utile? Potresti
realizzare una piccola app. per lanciare teamsource con l'utente che ti
serve (o ho capito male).
function ExecAndWait(const Filename, Params, Username, Domain,
Password: string; WindowState: word): boolean; overload;
var
  startUpInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CurrentDir: string;
  ApplicationName: string;
  CmdLine: string;
  hUserToken: THANDLE;
  hWindowStation: HWINSTA;
  hDesktop: HDESK;
  WinStaName, DeskTopName: string;
const
  SE_TCB_NAME = 'SeTcbPrivilege';
  DEFWINSTATION: string = 'WinSta0';
  DEFDESKTOP: string = 'Default';
  WHITESPACE: string = ' ' {SPACE} + chr(9) {TAB} + chr(10) {LF};
  DOMUSERSEP: string = '\';
begin
  { Enclose filename in quotes to take care of long filenames with
spaces. }
  CmdLine := '"' + Filename + '" ' + Params;
  CurrentDir := ExtractFilePath(Filename);
  ApplicationName := Filename;
  Result := LogonUser(PChar(Username), PChar(Domain), PChar(Password),
    LOGON32_LOGON_INTERACTIVE,
    LOGON32_PROVIDER_DEFAULT, hUserToken);
  if not Result then
  begin
    case GetLastError of
      ERROR_PRIVILEGE_NOT_HELD:
        begin
        end;
      ERROR_LOGON_FAILURE:
        begin
        end;
      ERROR_ACCESS_DENIED:
        begin
        end;
    end;
  end;
  hWindowStation := GetProcessWindowStation;
  if not GetUserObjectName(hWindowStation, WinStaName) then
    WinStaName := DEFWINSTATION;
  SetUserObjectAllAccess(hWindowStation);
  hDesktop := GetThreadDesktop(GetCurrentThreadId);
  if not GetUserObjectName(hDesktop, DeskTopName) then
    DeskTopName := DEFDESKTOP;
  SetUserObjectAllAccess(hDesktop);
  FillChar(startUpInfo, sizeof(startUpInfo), 0);
  with startUpInfo do
  begin
    cb := sizeof(startUpInfo);
    lpTitle := PChar('SignCode');
    lpDesktop := PChar(WinStaName + '\' + DeskTopName);
    wShowWindow := WindowState;
  end;
  Result := CreateProcessAsUser(hUserToken,
    nil, PChar(CmdLine), nil, nil, FALSE {no inherit handles},
    CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
    nil, nil, startUpInfo, procInfo);
  { Wait for it to finish. }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
     { Clean up the handles. }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
-- 
I'am what I'am, I do what I can

 serve (o ho capito male).
E' quello che mi serve, così dovrei riuscire a fregare quel bastardo!!!
Speriamo che dopo non faccia casini quando ci sarà da unire i file con due
versioni diverse
Grazie