Форум: "Основная";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
ВнизКак узнать версию Office? Найти похожие ветки
← →
Валера (2009-01-26 14:34) [0]Версию узнаю нормально, через реестр. Но может кто подскажет какая именно установлена;
Proffesional
Standart
Basic Edition
Еще проблема если установлено два одинаковых офиса (Proffesional и Basic Edition), как находить оба.
function IS_OXP_Installed: Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Result := Reg.KeyExists("SOFTWARE\MICROSOFT\Office\10.0\Registration");
finally
Reg.CloseKey;
Reg.Free;
end;
DN := ""; // Holds the Office XP Product Display Name
PID := ""; // Holds the Office XP Product ID
end;
function View_OXP_Key: string;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName := "SOFTWARE\MICROSOFT\Office\10.0\Registration\";
Reg.OpenKeyReadOnly(KeyName);
temp := TStringList.Create;
Reg.GetKeyNames(temp); // Enumerate and hold the Office XP Product(s) Key Name(s)
Reg.CloseKey;
SubKeyName := temp.Strings[0]; // Hold the first Office XP Product Key Name
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName2 := "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
Reg.OpenKeyReadOnly(KeyName2 + SubKeyName);
DN := (Reg.ReadString("DisplayName"));
Reg.CloseKey;
except
on E: EStringListError do
Exit
end;
try
if Reg.OpenKeyReadOnly(KeyName + SubKeyName) then
begin
if Reg.GetDataType("DigitalProductId") = rdBinary then
begin
PID := (Reg.ReadString("ProductID"));
binarySize := Reg.GetDataSize("DigitalProductId");
SetLength(HexBuf, binarySize);
if binarySize > 0 then
begin
Reg.ReadBinaryData("DigitalProductId", HexBuf[0], binarySize);
end;
end;
end;
finally
FreeAndNil(Reg);
end;
Result := "";
Result := DecodeProductKey(HexBuf);
end;
function IS_O2K3_Installed: Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Result := Reg.KeyExists("SOFTWARE\MICROSOFT\Office\11.0\Registration");
finally
Reg.CloseKey;
Reg.Free;
end;
DN := ""; // Holds the Office 2003 Product Display Name
PID := ""; // Holds the Office 2003 Product ID
end;
function View_O2K3_Key: string;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName := "SOFTWARE\MICROSOFT\Office\11.0\Registration\";
Reg.OpenKeyReadOnly(KeyName);
temp := TStringList.Create;
Reg.GetKeyNames(temp);
// Enumerate and hold the Office 2003 Product(s) Key Name(s)
Reg.CloseKey;
SubKeyName := temp.Strings[0]; // Hold the first Office 2003 Product Key Name
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName2 := "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
Reg.OpenKeyReadOnly(KeyName2 + SubKeyName);
DN := (Reg.ReadString("DisplayName"));
Reg.CloseKey;
except
on E: EStringListError do
Exit
end;
try
if Reg.OpenKeyReadOnly(KeyName + SubKeyName) then
begin
if Reg.GetDataType("DigitalProductId") = rdBinary then
begin
PID := (Reg.ReadString("ProductID"));
binarySize := Reg.GetDataSize("DigitalProductId");
SetLength(HexBuf, binarySize);
if binarySize > 0 then
begin
Reg.ReadBinaryData("DigitalProductId", HexBuf[0], binarySize);
end;
end;
end;
finally
FreeAndNil(Reg);
end;
Result := "";
Result := DecodeProductKey(HexBuf);
end;
function IS_O27_Installed: Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Result := Reg.KeyExists("SOFTWARE\MICROSOFT\Office\12.0\Registration");
finally
Reg.CloseKey;
Reg.Free;
end;
DN := ""; // Holds the Office 2000 Product Display Name
PID := ""; // Holds the Office 2000 Product ID
end;
function View_O27_Key: string;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName := "SOFTWARE\MICROSOFT\Office\12.0\Registration\";
Reg.OpenKeyReadOnly(KeyName);
temp := TStringList.Create;
Reg.GetKeyNames(temp);
// Enumerate and hold the Office 2000 Product(s) Key Name(s)
Reg.CloseKey;
SubKeyName := temp.Strings[0]; // Hold the first Office 2003 Product Key Name
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
KeyName2 := "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
Reg.OpenKeyReadOnly(KeyName2 + SubKeyName);
DN := (Reg.ReadString("DisplayName"));
Reg.CloseKey;
except
on E: EStringListError do
Exit
end;
try
if Reg.OpenKeyReadOnly(KeyName + SubKeyName) then
begin
if Reg.GetDataType("DigitalProductId") = rdBinary then
begin
PID := (Reg.ReadString("ProductID"));
binarySize := Reg.GetDataSize("DigitalProductId");
SetLength(HexBuf, binarySize);
if binarySize > 0 then
begin
Reg.ReadBinaryData("DigitalProductId", HexBuf[0], binarySize);
end;
end;
end;
finally
FreeAndNil(Reg);
end;
Result := "";
Result := DecodeProductKey(HexBuf);
end;
Begin
if not IS_OXP_Installed then
Begin
if not IS_O2K3_Installed then
Begin
if not IS_O27_Installed then
else
Edit11.Text := View_O27_Key;
Edit8.Text := DN;
End
else
Edit11.Text := View_O2K3_Key;
Edit8.Text := DN;
end
else
Edit11.Text := View_OXP_Key;
Edit8.Text := DN;
end;
← →
KSergey © (2009-01-26 16:54) [1]> Валера (26.01.09 14:34)
> Proffesional
> Standart
> Basic Edition
А офис сам об этом знает? Строчка в реестре - есть, текстовая, локализованная в Office\Registration\<GUID>\ProductName (и ProductNameBrand). Одинаков ли <GUID> для разных установлк - не знаю. Вариант только поустанавливать разные редакции и посмотреть, может что будет. Но так ли важно на самом деле? Что за задача?
А вот проверить установленность конкретной компоненты, нужной для работы вашей программы - это можно, но это другой вопрос.
> Еще проблема если установлено два одинаковых офиса (Proffesional и Basic Edition), как находить оба.
Одной версии?? Так не бывает.
Ну т.е. можно накатать, наверное, но это ж будет каша и лажа, зачем ее определять?
← →
Валера (2009-01-27 06:27) [2]Одинаков ли <GUID> для разных установлк - не знаю.
<GUID> разный но как его переберать перебором реестра???
Одной версии?? Так не бывает.
Бывает на компе стоял ломанный Proffesional, его удалили и поставили Basic Edition. При удалении он реестр не трогает и остаются ветви
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Registration\{90120000-0030-0000-0000-0000000FF1CE}
← →
KSergey © (2009-01-27 09:10) [3]А какая вообще задача-то? Она именно проверить установленность через рест?
А вообще, т.к. офис вполне себе нормальная система и устанавливается в систему грамотно - то, думаю, правильный путь искать установленные программы и их компоненты. Да да, то, что видно через установка/удаление программ.
Функций для енумерирования MSI-компонент с лету не подскажу, ну да разыщется, думаю.
← →
Валера (2009-01-27 11:49) [4]Задача узнать какой офис установлен и узнать какой ключ!
Делаю я это через реестр. Все получилось нормуль.
Но впроге был обнаружен такой баг как к примеру:
Если на комп ставили офис Proffesional, затем его удалили и поставили такой же офис только Basic Edition.
То прога выдает офис Proffesional
Все это происходит из за повторяющегося ключа, точнее из за части выделенной черным.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Registration\{90120000-0030-0000-0000-0000000FF1CE}
То есть появляются две записи как {90120000-0030-0000-0000-0000000FF1CE}
Пришел к одному варианту перебирать ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Registration и искать параметр DigitalProductID (ключ продукта).
Но как перебирать реестр?? Или организовать поиск параметра DigitalProductID в указанной ветке??
← →
KSergey © (2009-01-27 11:57) [5]> Валера (27.01.09 11:49) [4]
> Но как перебирать реестр??
TRegistry.GetValueNames
Ну и вапще посмотрите методы TRegistry, много полезного.
К стати, т.к. вам требуется только читать из реестра - открывайте его только на чтение. А то ваша поделка взорвется в первом же случае нормально настроенных прав.
PS
А вы не из отдела по борьбе с пиратством, случайно?
← →
Валера (2009-01-27 12:23) [6]
> PS
> А вы не из отдела по борьбе с пиратством, случайно?
=)
Нет просто в порядок организацию приводим
← →
Anatoly Podgoretsky © (2009-01-27 13:47) [7]> KSergey (27.01.2009 9:10:03) [3]
То что видно через "установка/удаление программ" очень не надежный источник.
← →
KSergey © (2009-01-27 15:12) [8]> Anatoly Podgoretsky © (27.01.09 13:47) [7]
> То что видно через "установка/удаление программ" очень не надежный источник.
Смотря что за задача. Например, по прошлой работе ставили свой продукт, который требовал наличия других продуктов. В setup проверяли как раз наличие необходимых компонент MSI.
Понятно, что тот прудукт мог и не работать (кончилась лицензия, пользователь потер половину exe-файлов и т.д.), но все ж некие precondition проверялись. Остальное отлавливалось во время работы своего приложения.
← →
KSergey © (2009-01-27 15:16) [9]Хотя в ситуации как у автора я бы поступил проще: приказ под роспись, что каждый проверил на своей машине в свойствах ворда какой он и номер лицензии. И если что не так или "дяди в погонах" найдут другой софт - то виноват тот, кто использует, контора "прикрывать" не будет.
Хотя, это в программерских конторах так делалось у нас; в "бухгалтерских" - может и правда проще "тихо". Правда не страхует от случая не по месту умного бухгалтера, в отличии от приказа.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c