1.获取当前Windows用户的全名(如果是域用户包含域名,如果是本机用户包含计算机名),inno实现代码:

声明枚举类型
用inno做setup遇到的一些问题及解决方法type EXTENDED_NAME_FORMAT=(NameUnknown,NameFullyQualifiedDN,NameSamCompatible,NameDisplay);
声明API方法
用inno做setup遇到的一些问题及解决方法function GetUserNameEx(NameFormat:EXTENDED_NAME_FORMAT;lpNameBuffer:String; var lpnSize:integer) : integer;
用inno做setup遇到的一些问题及解决方法external 
'GetUserNameExA@secur32.dll stdcall';
实现方法
用inno做setup遇到的一些问题及解决方法function GetUserName():string;
用inno做setup遇到的一些问题及解决方法var
用inno做setup遇到的一些问题及解决方法  Ret:integer;
用inno做setup遇到的一些问题及解决方法begin
用inno做setup遇到的一些问题及解决方法   lpNameBuffer:
='0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
用inno做setup遇到的一些问题及解决方法   lpNameBuffer:
=lpNameBuffer+lpNameBuffer;
用inno做setup遇到的一些问题及解决方法   ret:
=Length(lpNameBuffer);
用inno做setup遇到的一些问题及解决方法   NameFormat:
= NameSamCompatible;
用inno做setup遇到的一些问题及解决方法   If GetUserNameEx(NameFormat, lpNameBuffer, Ret)
<>0 Then
用inno做setup遇到的一些问题及解决方法   begin
用inno做setup遇到的一些问题及解决方法      
if lpNameBuffer[Ret]=#0 then
用inno做setup遇到的一些问题及解决方法      begin
用inno做setup遇到的一些问题及解决方法          Ret:
=Ret-1;
用inno做setup遇到的一些问题及解决方法      end
用inno做setup遇到的一些问题及解决方法      result:
=Copy(lpNameBuffer,1,Ret);
用inno做setup遇到的一些问题及解决方法   end
用inno做setup遇到的一些问题及解决方法   
else
用inno做setup遇到的一些问题及解决方法   begin
用inno做setup遇到的一些问题及解决方法      result:
='-1';
用inno做setup遇到的一些问题及解决方法   end
用inno做setup遇到的一些问题及解决方法end;
这个实现方法中主要有两个小问题:
首先要初始化一个足够长度的string,否则GetUserNameEx无法写入;
其次是在winxp系统下返回的用户名会比其他系统下多一个“\0”字符。

2.WinXP系统下利用OLEDB连接本地SQLServer2005需要使用计算机名,而使用(local)或localhost都无法连接。利用ado.net没有这个问题,连接SQLServer Express也没有这个问题。

3.Vista系统下将可执行文件改名为setup.exe将会自动以管理员的身份运行。

相关文章: