xref: /AOO41X/main/cui/source/dialogs/winpluginlib.cpp (revision e28571a59159038f8bbb64889528ce5551700589)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #if defined _MSC_VER
25 #pragma warning(push, 1)
26 #endif
27 #include <windows.h>
28 #if defined _MSC_VER
29 #pragma warning(pop)
30 #endif
31 #include <Winreg.h>
32 #include <Shlwapi.h>
33 #include <stdio.h>
34 
35 
36 #define SO_PATH_SIZE        4096
37 #define MOZ_PLUGIN_DLL_NAME "npsopluginmi.dll"
38 extern "C" {
lc_isInstalled(const char * realFilePath)39 int lc_isInstalled(const  char* realFilePath)
40 {
41     HKEY hKeySoftware;
42     HKEY hMozillaPlugins;
43     HKEY hStarOffice;
44     char sSoPath[SO_PATH_SIZE];
45     char sPluginPath[SO_PATH_SIZE];
46 
47     LONG ret;
48     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ, &hKeySoftware);
49     if(ret != ERROR_SUCCESS){
50         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ, &hKeySoftware);
51         if(ret != ERROR_SUCCESS){
52             return -1;
53         }
54     }
55     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ, &hMozillaPlugins);
56     if(ret != ERROR_SUCCESS){
57         RegCloseKey(hKeySoftware);
58         if( ret == ERROR_FILE_NOT_FOUND)
59             return 1;
60         else
61             return -1;
62     }
63     ret = RegOpenKeyEx(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0",  0,  KEY_READ, &hStarOffice);
64     if(ret != ERROR_SUCCESS){
65         RegCloseKey(hKeySoftware);
66         RegCloseKey(hMozillaPlugins);
67         if( ret == ERROR_FILE_NOT_FOUND)
68             return 1;
69         else
70             return -1;
71     }
72 
73     if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
74         ret = -1;
75     else{
76         sprintf(sSoPath,"%s", realFilePath);
77         ret = 0;
78     }
79     //ret =  GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
80     //ret = GetEnvironmentVariable("prog", sSoPath, SO_PATH_SIZE);
81     // GetCurrentDirectory return the char number of the string
82     if(ret == 0){
83         DWORD  dType = REG_SZ;
84         DWORD  dSize = SO_PATH_SIZE;
85         ret = RegQueryValueEx (hStarOffice, "Path", NULL,  &dType , (LPBYTE) sPluginPath, &dSize);
86         if(ret == ERROR_SUCCESS){
87             if(strcmp(sPluginPath, sSoPath) == 0)
88                 ret = 0;
89             else
90                 ret = 1;
91         }
92         else
93             ret = -1;
94     }
95     else
96         ret = -1;
97     RegCloseKey(hStarOffice);
98     RegCloseKey(hMozillaPlugins);
99     RegCloseKey(hKeySoftware);
100     return ret;
101 }
102 
lc_uninstallPlugin(const char *)103 int lc_uninstallPlugin(const  char*)
104 {
105     HKEY hKeySoftware;
106     HKEY hMozillaPlugins;
107     HKEY hStarOffice;
108 
109     LONG ret;
110     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
111     if(ret != ERROR_SUCCESS){
112         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
113         if(ret != ERROR_SUCCESS){
114             return -1;
115         }
116     }
117     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ|KEY_WRITE, &hMozillaPlugins);
118     if(ret != ERROR_SUCCESS){
119         RegCloseKey(hKeySoftware);
120         if( ret == ERROR_FILE_NOT_FOUND)
121             return 0;
122         else
123             return -1;
124     }
125 
126     ret = RegOpenKeyEx(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0",  0,  KEY_READ|KEY_WRITE, &hStarOffice);
127     if(ret != ERROR_SUCCESS){
128         RegCloseKey(hKeySoftware);
129         RegCloseKey(hMozillaPlugins);
130         if( ret == ERROR_FILE_NOT_FOUND)
131             return 0;
132         else
133             return -1;
134     }
135     RegCloseKey(hStarOffice);
136     ret = SHDeleteKey(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0");
137     if(ret != ERROR_SUCCESS){
138         ret = -1;
139     }
140     RegFlushKey(hMozillaPlugins);
141     RegCloseKey(hMozillaPlugins);
142     RegCloseKey(hKeySoftware);
143     return ret;
144 }
145 
lc_installPlugin(const char * realFilePath)146 int lc_installPlugin(const  char* realFilePath)
147 {
148     HKEY hKeySoftware;
149     HKEY hMozillaPlugins;
150     HKEY hStarOffice;
151     char sSoPath[SO_PATH_SIZE];
152     DWORD  sState;
153 
154 
155     LONG ret;
156     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
157     if(ret != ERROR_SUCCESS){
158         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
159         if(ret != ERROR_SUCCESS){
160             return -1;
161         }
162     }
163     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ|KEY_WRITE, &hMozillaPlugins);
164     if(ret != ERROR_SUCCESS){
165         RegCreateKeyEx(hKeySoftware,
166             "MozillaPlugins",
167             0,
168             NULL,
169             REG_OPTION_NON_VOLATILE,
170             KEY_READ|KEY_WRITE,
171             NULL,
172             &hMozillaPlugins,
173             &sState);
174     }
175 
176     ret = RegCreateKeyEx(hMozillaPlugins,
177         "@sun.com/npsopluginmi;version=1.0",
178         0,
179         NULL,
180         REG_OPTION_NON_VOLATILE,
181         KEY_READ|KEY_WRITE,
182         NULL,
183         &hStarOffice,
184         &sState);
185     if(ret != ERROR_SUCCESS){
186         RegCloseKey(hKeySoftware);
187         RegCloseKey(hMozillaPlugins);
188         return -1;
189     }
190 
191     RegFlushKey(hStarOffice);
192     RegFlushKey(hMozillaPlugins);
193 
194 
195     if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
196         ret = -1;
197     else{
198         sprintf(sSoPath,"%s", realFilePath);
199         ret = 0;
200     }
201 
202     //ret =  GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
203     // GetCurrentDirectory return the char number of the string
204     if(ret == 0){
205         ret = RegSetValueEx( hStarOffice, "Path", 0, REG_SZ,  (LPBYTE) sSoPath, strlen(sSoPath) + 1);
206         if(ret == ERROR_SUCCESS)
207             ret = 0;
208         else
209             ret = -1;
210     }
211     else
212         ret = -1;
213     RegFlushKey(hStarOffice);
214     RegFlushKey(hMozillaPlugins);
215     RegCloseKey(hStarOffice);
216     RegCloseKey(hMozillaPlugins);
217     RegCloseKey(hKeySoftware);
218     RegFlushKey(HKEY_LOCAL_MACHINE);
219 
220     return ret;
221 }
222 }
223