Tworzę w aplikacji dataGrida, którego przepisuję potem do Excela. Jeśli na komputerze jest zainstalowany Excel to wszystko gra, gorzej gdy nie ma Office, wtedy wyskakuje mi komunikat:
wprowadziłem sprawdzanie w rejestrze systemu, czy jest zainstalowany office i tu zaczyna się niespodzianka:
private static bool IsOfficeInstalled()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe");
if (key != null)
{
key.Close();
}
return key != null;
}
private void button4_Click(object sender, EventArgs e)
{
if (IsOfficeInstalled())
{
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
(...) //tutaj przepisuję sobie do excela datagrida i ogólnie bawię się w formatowanie dokumentu
}else{
MessageBox.Show("Wykryto brak pakietu Office");
}
}
przy uruchamianiu kodu powyżej na maszynie, na która nie ma zainstalowanego Office dostaję komunikat z początku wiadomości.
Jeśli zakomentuję 3 linijki zaczynające się od Microsoft.Office.Iterop bez problemu button4 działa i wykonuje się "else", czyli dostaję komunikat o braku pakietu Office. "IsOfficeInstalled()" zwraca false, co już sprawdziłem, także nie ma mowy o pomyłce na tym etapie. Dlaczego aplikacja wywala się na maszynie bez office, mimo że teoretycznie nie wchodzi do IF?
Dodam jeszcze, że nie mogę szybko zdebugować tego i przelecieć kodu linijka po linijce, bo na maszynie, gdzie mam VisualStudio jest Office, a testuję już sam plik exe na maszynie, gdzie Office nie mam.