Có cách nào để tạo GUID mới từ bên trong tập lệnh Inno Setup không?Cách tạo GUID mới trong Cài đặt Inno?
Trả lời
Các mặt hàng này về lưu trữ nhóm tin InnoSetup:
http://news.jrsoftware.org/news/innosetup/msg76234.html
tôi đã không kiểm tra nó.
[Code]
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
function inttohex(l:longword; digits:integer):string;
var hexchars:string;
begin
hexchars:='ABCDEF';
setlength(result,digits);
while (digits>0) do begin
result[digits]:=hexchars[l mod 16+1];
l:=l div 16;
digits:=digits-1;
end;
end;
function GetGuid(dummy:string):string;
var Guid:TGuid;
begin
if CoCreateGuid(Guid)=0 then begin
result:='{'+IntToHex(Guid.D1,8)+'-'+
IntToHex(Guid.D2,4)+'-'+
IntToHex(Guid.D3,4)+'-'+
IntToHex(Guid.D4[0],2)+IntToHex(Guid.D4[1],2)+'-'+
IntToHex(Guid.D4[2],2)+IntToHex(Guid.D4[3],2)+
IntToHex(Guid.D4[4],2)+IntToHex(Guid.D4[5],2)+
IntToHex(Guid.D4[6],2)+IntToHex(Guid.D4[7],2)+
'}';
end else
result:='{00000000-0000-0000-0000-000000000000}';
end;
function InitializeSetup(): Boolean;
begin
MsgBox(GetGuid(''), mbInformation, MB_OK);
Result := False;
end;
Bạn có thể thực hiện việc này bằng cách gọi hàm Windows API CoCreateGuid (trong "OLE32.dll"), mà bạn khai báo bên trong phần [Mã] trong tập lệnh của bạn. Xin lỗi, tôi đã không sử dụng thiết lập Inno trong một thời gian vì vậy tôi không biết chính xác làm thế nào để làm điều này. Để giúp đỡ, đây là một lời tuyên bố mẫu API cho GetWindow() chức năng:
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;
external '[email protected] stdcall';
Và đây là một liên kết đến một mẫu VB cho việc sử dụng CoCreateGuid:
http://support.microsoft.com/kb/176790
Một nơi nào đó trong tất cả điều này là của bạn câu trả lời.
câu trả lời của Giorgian cho thấy cách thực hiện việc này trong Cài đặt Inno. – MusiGenesis
Dưới đây là một việc thực hiện phần nào sạch của FormatGuid
, không có chức năng hex-định dạng không cần thiết (chúng ta có gì Format
cho ?!):
function FormatGuid(Guid:TGuid):string;
begin
result:=Format('%.8x-%.4x-%.4x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x', [Guid.D1, Guid.D2, Guid.D3, Guid.D4[0], Guid.D4[1], Guid.D4[2], Guid.D4[3], Guid.D4[4], Guid.D4[5], Guid.D4[6], Guid.D4[7]]);
end;
Bạn vẫn cần phải xác định TGuid
và nhập CoCreateGuid
như trong các câu trả lời khác:
type
TGuid = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
Thật không may, kết quả của các chức năng FormatGuid trong câu trả lời này đã không tạo ra một chuỗi đại diện của một GUID trong một định dạng hợp lệ. Thay vào đó, một chuỗi được tạo dưới dạng XXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX-XX-XX Xác thực được thực hiện qua http://guid.us/Test/GUID –
An định dạng chuỗi thay thế được hiển thị tại: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_TGUID.html Định dạng này xuất hiện để tạo GUID hợp lệ theo http: // guid.us/Test/GUID –
Tôi đã sử dụng giải pháp này một thời gian (chạy 5.5.0 (a) và 5.5. 1 (a)).
Tuy nhiên, khi tôi cập nhật lên 5.5.2 (u) - tập lệnh xây dựng của tôi không thành công do lỗi loại trùng lặp: 'TGUID'.
Để khắc phục nó, tôi đã phải loại bỏ:
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
này chỉ xảy ra trên các phiên bản Unicode - có nghĩa 5.5.2 (u) đã tích hợp sẵn trong loại GUID.
- 1. Chạy trình cài đặt khác trong cài đặt Inno Setup
- 2. Thoát khỏi Cài đặt Cài đặt Inno từ [code]
- 3. Cài đặt Inno: Cách xác định mảng trong const?
- 4. Cài đặt Inno: TBitmapImage không hiển thị
- 5. Cài đặt Inno: Cài đặt tệp từ Internet
- 6. Cài đặt Inno: Cách đặt trình cài đặt "Chạy với tư cách quản trị viên"?
- 7. Cài đặt Inno Đổi tên tệp trong khi đóng gói
- 8. Cách nâng cấp cài đặt MSI bằng trình cài đặt Inno Setup?
- 9. Cài đặt Inno: Cài đặt các dịch vụ Windows bằng cách sử dụng "sc create"
- 10. Cài đặt Inno Hằng số trong Mã Mục
- 11. Hiển thị liên kết Thỏa thuận Cấp phép trong Cài đặt Inno trong khi cài đặt
- 12. Cài đặt Inno Setup có thể chạy được (cài đặt trình điều khiển) trong khi cài đặt
- 13. Làm cách nào tôi có thể sử dụng GetVolumeInformation trong Cài đặt Inno?
- 14. Xóa thành phần GUID = "" được cài đặt với WiX
- 15. Cài đặt Inno: Ẩn/Tắt thành phần khi chạy
- 16. Có cách nào để tạo ra một guid trong ANT?
- 17. Cài đặt Inno: Thêm trường nhập tùy chỉnh
- 18. Đặt DestDir từ Inno Pascal?
- 19. Cài đặt Inno; Tạo biểu tượng trên màn hình để vượt qua biểu tượng hiện tại
- 20. Cài đặt tệp trong thư mục người dùng AppData bằng cách sử dụng thiết lập inno
- 21. Làm thế nào để ký số hóa tập tin cài đặt tạo ra Inno Setup?
- 22. Cài đặt Inno: Xác minh rằng .NET 4.0 đã được cài đặt
- 23. Tạo ứng dụng javafx gốc với Cài đặt Inno và maven
- 24. Thiết lập Inno: Làm cách nào để xem đầu ra (bản dịch) của Bộ xử lý cài đặt Inno?
- 25. Cài đặt Inno - Cách đặt quyền đầy đủ trên một thư mục, không chỉ cho nội dung của nó
- 26. Chèn GUID mới vào Visual Studio 2012
- 27. Cách ghi đường dẫn cài đặt vào sổ đăng ký sau khi cài đặt hoàn tất với thiết lập Inno
- 28. Làm cho trình cài đặt có văn bản được định dạng (một phần Bold) trong Cài đặt Inno?
- 29. Sử dụng Cài đặt Inno, cách nhập tệp .cer chứng chỉ?
- 30. Cài đặt JRE mới trong Eclipse
Đó là những gì tôi đang tìm kiếm. – MusiGenesis
Ngoài ra, còn có một cuộc gọi API win32 khác để chuyển đổi GUID thô từ CoCreateGuid() thành một chuỗi đại diện theo định dạng {00000000-0000-0000-0000-000000000000}, điều này sẽ đơn giản hóa rất nhiều chức năng trên, nhưng tôi không nhớ những gì nó được đặt tên. – MusiGenesis
StringFromCLSID là cuộc gọi API win32 thứ hai để sử dụng cho điều này, cũng từ ole32.dll. – MusiGenesis