This is the outline of what I have done:
1) the .dll and .exe files for the CE device are stored in a database table like this
CREATE TABLE tbl_sys_modulfiles(
file_name varchar(80) NOT NULL,
file_size int NULL,
file_date datetime NULL,
file_version varchar(50) NULL,
upload_date datetime NULL,
file_data varbinary(max) NULL,
CONSTRAINT tbl_sys_modulfiles_pk PRIMARY KEY CLUSTERED
(
file_name ASC
)
as the CE client application works with the database anyway, this seems to me like a place where the application has to look anyway.
2) programm start is performed in two steps
2.1) a launcher checks if the versions local on the device are up to date
if not, they are updated from the data in the varbinary column
2.2) after checking and updating the launcher starts the 'real' application.
There are some artikels here on codeproject that descript these sorts of 'self-update'. Worked well for me for some years now with ca. 20 devices