diff --git a/Makefile b/Makefile index 270a4a3..9709c6a 100755 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ package: #cd VM-source && make #cd wine && make make clean -j$(nproc) + mkdir deb/opt/apps/deepin-wine-runner/LANG -pv cp -rv helperset deb/opt/apps/deepin-wine-runner/ #cp -rv VM-source/VirtualMachine VM cp -rv VM-source/deepin-wine-runner.svg VM @@ -112,7 +113,10 @@ package: cp -rv InstallRuntime deb/opt/apps/deepin-wine-runner python3 UpdateTime.py python3 RemovePycacheFile.py + sudo rm -rfv /tmp/spark-deepin-wine-runner-builder/ cp -rv deb /tmp/spark-deepin-wine-runner-builder + rm -rfv deb/opt/apps/deepin-wine-runner/* + rm -rfv package-script.zip mkdir -pv /tmp/spark-deepin-wine-runner-builder/usr/bin ln -s /opt/apps/deepin-wine-runner/deepin-wine-packager.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-package-builder ln -s /opt/apps/deepin-wine-runner/deepin-wine-easy-packager.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-packager-easy-builder diff --git a/deb/DEBIAN/control b/deb/DEBIAN/control index 54abc86..082a87d 100755 --- a/deb/DEBIAN/control +++ b/deb/DEBIAN/control @@ -18,7 +18,6 @@ Description: gfdgd xi 制作的 wine 运行器 3.2.2 更新内容: ※1. 修改源地址,脱离 Gitlink; ※2. 修复非 X86 架构运行器主页面虚拟机工具禁用的问题。 - 3.2.1 更新内容: ※1、Windows 虚拟机安装工具支持非 X86 架构; ※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包; diff --git a/deb/opt/apps/deepin-wine-runner/2048/.gitignore b/deb/opt/apps/deepin-wine-runner/2048/.gitignore deleted file mode 100644 index 0d31019..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.sass-cache/ diff --git a/deb/opt/apps/deepin-wine-runner/2048/.jshintrc b/deb/opt/apps/deepin-wine-runner/2048/.jshintrc deleted file mode 100644 index 87dbf9a..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/.jshintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "esnext": true, - "indent": 2, - "maxlen": 80, - "freeze": true, - "camelcase": true, - "unused": true, - "eqnull": true, - "proto": true, - "supernew": true, - "noyield": true, - "evil": true, - "node": true, - "boss": true, - "expr": true, - "loopfunc": true, - "white": true, - "maxdepth": 4 -} diff --git a/deb/opt/apps/deepin-wine-runner/2048/CONTRIBUTING.md b/deb/opt/apps/deepin-wine-runner/2048/CONTRIBUTING.md deleted file mode 100644 index 8b269ae..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/CONTRIBUTING.md +++ /dev/null @@ -1,33 +0,0 @@ -# Contributing -Changes and improvements are more than welcome! Feel free to fork and open a pull request. - -Please follow the house rules to have a bigger chance of your contribution being merged. - -## House rules - -### How to make changes - - To make changes, create a new branch based on `master` (do not create one from `gh-pages` unless strictly necessary) and make them there, then create a Pull Request to master. - `gh-pages` is different from master in that it contains sharing features, analytics and other things that have no direct bearing with the game. `master` is the "pure" version of the game. - - If you want to modify the CSS, please edit the SCSS files present in `style/`: `main.scss` and others. Don't edit the `main.css`, because it's supposed to be generated. - In order to compile your SCSS modifications, you need to use the `sass` gem (install it by running `gem install sass` once Ruby is installed). - To run SASS, simply use the following command: - `sass --unix-newlines --watch style/main.scss` - SASS will automatically recompile your css when changed. - - `Rakefile` contains some tasks that help during development. Feel free to add useful tasks if needed. - - Please use 2-space indentation when editing the JavaScript. A `.jshintrc` file is present, which will help your code to follow the guidelines if you install and run `jshint`. - - Please test your modification thoroughly before submitting your Pull Request. - -### Changes that might not be accepted -We have to be conservative with the core game. This means that some modifications won't be merged, or will have to be evaluated carefully before being merged: - - - Undo/redo features - - Save/reload features - - Changes to how the tiles look or their contents - - Changes to the layout - - Changes to the grid size - -### Changes that are welcome - - Bug fixes - - Compatibility improvements - - "Under the hood" enhancements - - Small changes that don't have an impact on the core gameplay diff --git a/deb/opt/apps/deepin-wine-runner/2048/LICENSE.txt b/deb/opt/apps/deepin-wine-runner/2048/LICENSE.txt deleted file mode 100644 index b0dbfa4..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Gabriele Cirulli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/deb/opt/apps/deepin-wine-runner/2048/README.md b/deb/opt/apps/deepin-wine-runner/2048/README.md deleted file mode 100644 index 6b1da38..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# 2048 -A small clone of [1024](https://play.google.com/store/apps/details?id=com.veewo.a1024), based on [Saming's 2048](http://saming.fr/p/2048/) (also a clone). - -Made just for fun. [Play it here!](http://gabrielecirulli.github.io/2048/) - -The official app can also be found on the [Play Store](https://play.google.com/store/apps/details?id=com.gabrielecirulli.app2048) and [App Store!](https://itunes.apple.com/us/app/2048-by-gabriele-cirulli/id868076805) - -### Contributions - -[Anna Harren](https://github.com/iirelu/) and [sigod](https://github.com/sigod) are maintainers for this repository. - -Other notable contributors: - - - [TimPetricola](https://github.com/TimPetricola) added best score storage - - [chrisprice](https://github.com/chrisprice) added custom code for swipe handling on mobile - - [marcingajda](https://github.com/marcingajda) made swipes work on Windows Phone - - [mgarciaisaia](https://github.com/mgarciaisaia) added support for Android 2.3 - -Many thanks to [rayhaanj](https://github.com/rayhaanj), [Mechazawa](https://github.com/Mechazawa), [grant](https://github.com/grant), [remram44](https://github.com/remram44) and [ghoullier](https://github.com/ghoullier) for the many other good contributions. - -### Screenshot - -

- Screenshot -

- -That screenshot is fake, by the way. I never reached 2048 :smile: - -## Contributing -Changes and improvements are more than welcome! Feel free to fork and open a pull request. Please make your changes in a specific branch and request to pull into `master`! If you can, please make sure the game fully works before sending the PR, as that will help speed up the process. - -You can find the same information in the [contributing guide.](https://github.com/gabrielecirulli/2048/blob/master/CONTRIBUTING.md) - -## License -2048 is licensed under the [MIT license.](https://github.com/gabrielecirulli/2048/blob/master/LICENSE.txt) - -## Donations -I made this in my spare time, and it's hosted on GitHub (which means I don't have any hosting costs), but if you enjoyed the game and feel like buying me coffee, you can donate at my BTC address: `1Ec6onfsQmoP9kkL3zkpB6c5sA4PVcXU2i`. Thank you very much! diff --git a/deb/opt/apps/deepin-wine-runner/2048/Rakefile b/deb/opt/apps/deepin-wine-runner/2048/Rakefile deleted file mode 100644 index 3e9851e..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/Rakefile +++ /dev/null @@ -1,11 +0,0 @@ -require "date" - -namespace :appcache do - desc "update the date in the appcache file (in the gh-pages branch)" - task :update do - appcache = File.read("cache.appcache") - updated = "# Updated: #{DateTime.now}" - - File.write("cache.appcache", appcache.sub(/^# Updated:.*$/, updated)) - end -end diff --git a/deb/opt/apps/deepin-wine-runner/2048/favicon.ico b/deb/opt/apps/deepin-wine-runner/2048/favicon.ico deleted file mode 100644 index 22109e0..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/favicon.ico and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/index.html b/deb/opt/apps/deepin-wine-runner/2048/index.html deleted file mode 100644 index 0da0ee0..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - 2048 - - - - - - - - - - - - - - -
-
-

2048

-
-
0
-
0
-
-
- -
-

Join the numbers and get to the 2048 tile!

- New Game -
- -
-
-

- -
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- -
-
- -

- How to play: Use your arrow keys to move the tiles. When two tiles with the same number touch, they merge into one! -

-
-

- Note: This site is the official version of 2048. You can play it on your phone via http://git.io/2048. All other apps or sites are derivatives or fakes, and should be used with caution. -

-
-

- Created by Gabriele Cirulli. Based on 1024 by Veewo Studio and conceptually similar to Threes by Asher Vollmer. -

-
- - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/animframe_polyfill.js b/deb/opt/apps/deepin-wine-runner/2048/js/animframe_polyfill.js deleted file mode 100644 index c524a99..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/animframe_polyfill.js +++ /dev/null @@ -1,28 +0,0 @@ -(function () { - var lastTime = 0; - var vendors = ['webkit', 'moz']; - for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; - window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || - window[vendors[x] + 'CancelRequestAnimationFrame']; - } - - if (!window.requestAnimationFrame) { - window.requestAnimationFrame = function (callback) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = window.setTimeout(function () { - callback(currTime + timeToCall); - }, - timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - } - - if (!window.cancelAnimationFrame) { - window.cancelAnimationFrame = function (id) { - clearTimeout(id); - }; - } -}()); diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/application.js b/deb/opt/apps/deepin-wine-runner/2048/js/application.js deleted file mode 100644 index 2c1108e..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/application.js +++ /dev/null @@ -1,4 +0,0 @@ -// Wait till the browser is ready to render the game (avoids glitches) -window.requestAnimationFrame(function () { - new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager); -}); diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/bind_polyfill.js b/deb/opt/apps/deepin-wine-runner/2048/js/bind_polyfill.js deleted file mode 100644 index 8d9c4a4..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/bind_polyfill.js +++ /dev/null @@ -1,9 +0,0 @@ -Function.prototype.bind = Function.prototype.bind || function (target) { - var self = this; - return function (args) { - if (!(args instanceof Array)) { - args = [args]; - } - self.apply(target, args); - }; -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/classlist_polyfill.js b/deb/opt/apps/deepin-wine-runner/2048/js/classlist_polyfill.js deleted file mode 100644 index 1789ae7..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/classlist_polyfill.js +++ /dev/null @@ -1,71 +0,0 @@ -(function () { - if (typeof window.Element === "undefined" || - "classList" in document.documentElement) { - return; - } - - var prototype = Array.prototype, - push = prototype.push, - splice = prototype.splice, - join = prototype.join; - - function DOMTokenList(el) { - this.el = el; - // The className needs to be trimmed and split on whitespace - // to retrieve a list of classes. - var classes = el.className.replace(/^\s+|\s+$/g, '').split(/\s+/); - for (var i = 0; i < classes.length; i++) { - push.call(this, classes[i]); - } - } - - DOMTokenList.prototype = { - add: function (token) { - if (this.contains(token)) return; - push.call(this, token); - this.el.className = this.toString(); - }, - contains: function (token) { - return this.el.className.indexOf(token) != -1; - }, - item: function (index) { - return this[index] || null; - }, - remove: function (token) { - if (!this.contains(token)) return; - for (var i = 0; i < this.length; i++) { - if (this[i] == token) break; - } - splice.call(this, i, 1); - this.el.className = this.toString(); - }, - toString: function () { - return join.call(this, ' '); - }, - toggle: function (token) { - if (!this.contains(token)) { - this.add(token); - } else { - this.remove(token); - } - - return this.contains(token); - } - }; - - window.DOMTokenList = DOMTokenList; - - function defineElementGetter(obj, prop, getter) { - if (Object.defineProperty) { - Object.defineProperty(obj, prop, { - get: getter - }); - } else { - obj.__defineGetter__(prop, getter); - } - } - - defineElementGetter(HTMLElement.prototype, 'classList', function () { - return new DOMTokenList(this); - }); -})(); diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/game_manager.js b/deb/opt/apps/deepin-wine-runner/2048/js/game_manager.js deleted file mode 100644 index 1c13d15..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/game_manager.js +++ /dev/null @@ -1,272 +0,0 @@ -function GameManager(size, InputManager, Actuator, StorageManager) { - this.size = size; // Size of the grid - this.inputManager = new InputManager; - this.storageManager = new StorageManager; - this.actuator = new Actuator; - - this.startTiles = 2; - - this.inputManager.on("move", this.move.bind(this)); - this.inputManager.on("restart", this.restart.bind(this)); - this.inputManager.on("keepPlaying", this.keepPlaying.bind(this)); - - this.setup(); -} - -// Restart the game -GameManager.prototype.restart = function () { - this.storageManager.clearGameState(); - this.actuator.continueGame(); // Clear the game won/lost message - this.setup(); -}; - -// Keep playing after winning (allows going over 2048) -GameManager.prototype.keepPlaying = function () { - this.keepPlaying = true; - this.actuator.continueGame(); // Clear the game won/lost message -}; - -// Return true if the game is lost, or has won and the user hasn't kept playing -GameManager.prototype.isGameTerminated = function () { - return this.over || (this.won && !this.keepPlaying); -}; - -// Set up the game -GameManager.prototype.setup = function () { - var previousState = this.storageManager.getGameState(); - - // Reload the game from a previous game if present - if (previousState) { - this.grid = new Grid(previousState.grid.size, - previousState.grid.cells); // Reload grid - this.score = previousState.score; - this.over = previousState.over; - this.won = previousState.won; - this.keepPlaying = previousState.keepPlaying; - } else { - this.grid = new Grid(this.size); - this.score = 0; - this.over = false; - this.won = false; - this.keepPlaying = false; - - // Add the initial tiles - this.addStartTiles(); - } - - // Update the actuator - this.actuate(); -}; - -// Set up the initial tiles to start the game with -GameManager.prototype.addStartTiles = function () { - for (var i = 0; i < this.startTiles; i++) { - this.addRandomTile(); - } -}; - -// Adds a tile in a random position -GameManager.prototype.addRandomTile = function () { - if (this.grid.cellsAvailable()) { - var value = Math.random() < 0.9 ? 2 : 4; - var tile = new Tile(this.grid.randomAvailableCell(), value); - - this.grid.insertTile(tile); - } -}; - -// Sends the updated grid to the actuator -GameManager.prototype.actuate = function () { - if (this.storageManager.getBestScore() < this.score) { - this.storageManager.setBestScore(this.score); - } - - // Clear the state when the game is over (game over only, not win) - if (this.over) { - this.storageManager.clearGameState(); - } else { - this.storageManager.setGameState(this.serialize()); - } - - this.actuator.actuate(this.grid, { - score: this.score, - over: this.over, - won: this.won, - bestScore: this.storageManager.getBestScore(), - terminated: this.isGameTerminated() - }); - -}; - -// Represent the current game as an object -GameManager.prototype.serialize = function () { - return { - grid: this.grid.serialize(), - score: this.score, - over: this.over, - won: this.won, - keepPlaying: this.keepPlaying - }; -}; - -// Save all tile positions and remove merger info -GameManager.prototype.prepareTiles = function () { - this.grid.eachCell(function (x, y, tile) { - if (tile) { - tile.mergedFrom = null; - tile.savePosition(); - } - }); -}; - -// Move a tile and its representation -GameManager.prototype.moveTile = function (tile, cell) { - this.grid.cells[tile.x][tile.y] = null; - this.grid.cells[cell.x][cell.y] = tile; - tile.updatePosition(cell); -}; - -// Move tiles on the grid in the specified direction -GameManager.prototype.move = function (direction) { - // 0: up, 1: right, 2: down, 3: left - var self = this; - - if (this.isGameTerminated()) return; // Don't do anything if the game's over - - var cell, tile; - - var vector = this.getVector(direction); - var traversals = this.buildTraversals(vector); - var moved = false; - - // Save the current tile positions and remove merger information - this.prepareTiles(); - - // Traverse the grid in the right direction and move tiles - traversals.x.forEach(function (x) { - traversals.y.forEach(function (y) { - cell = { x: x, y: y }; - tile = self.grid.cellContent(cell); - - if (tile) { - var positions = self.findFarthestPosition(cell, vector); - var next = self.grid.cellContent(positions.next); - - // Only one merger per row traversal? - if (next && next.value === tile.value && !next.mergedFrom) { - var merged = new Tile(positions.next, tile.value * 2); - merged.mergedFrom = [tile, next]; - - self.grid.insertTile(merged); - self.grid.removeTile(tile); - - // Converge the two tiles' positions - tile.updatePosition(positions.next); - - // Update the score - self.score += merged.value; - - // The mighty 2048 tile - if (merged.value === 2048) self.won = true; - } else { - self.moveTile(tile, positions.farthest); - } - - if (!self.positionsEqual(cell, tile)) { - moved = true; // The tile moved from its original cell! - } - } - }); - }); - - if (moved) { - this.addRandomTile(); - - if (!this.movesAvailable()) { - this.over = true; // Game over! - } - - this.actuate(); - } -}; - -// Get the vector representing the chosen direction -GameManager.prototype.getVector = function (direction) { - // Vectors representing tile movement - var map = { - 0: { x: 0, y: -1 }, // Up - 1: { x: 1, y: 0 }, // Right - 2: { x: 0, y: 1 }, // Down - 3: { x: -1, y: 0 } // Left - }; - - return map[direction]; -}; - -// Build a list of positions to traverse in the right order -GameManager.prototype.buildTraversals = function (vector) { - var traversals = { x: [], y: [] }; - - for (var pos = 0; pos < this.size; pos++) { - traversals.x.push(pos); - traversals.y.push(pos); - } - - // Always traverse from the farthest cell in the chosen direction - if (vector.x === 1) traversals.x = traversals.x.reverse(); - if (vector.y === 1) traversals.y = traversals.y.reverse(); - - return traversals; -}; - -GameManager.prototype.findFarthestPosition = function (cell, vector) { - var previous; - - // Progress towards the vector direction until an obstacle is found - do { - previous = cell; - cell = { x: previous.x + vector.x, y: previous.y + vector.y }; - } while (this.grid.withinBounds(cell) && - this.grid.cellAvailable(cell)); - - return { - farthest: previous, - next: cell // Used to check if a merge is required - }; -}; - -GameManager.prototype.movesAvailable = function () { - return this.grid.cellsAvailable() || this.tileMatchesAvailable(); -}; - -// Check for available matches between tiles (more expensive check) -GameManager.prototype.tileMatchesAvailable = function () { - var self = this; - - var tile; - - for (var x = 0; x < this.size; x++) { - for (var y = 0; y < this.size; y++) { - tile = this.grid.cellContent({ x: x, y: y }); - - if (tile) { - for (var direction = 0; direction < 4; direction++) { - var vector = self.getVector(direction); - var cell = { x: x + vector.x, y: y + vector.y }; - - var other = self.grid.cellContent(cell); - - if (other && other.value === tile.value) { - return true; // These two tiles can be merged - } - } - } - } - } - - return false; -}; - -GameManager.prototype.positionsEqual = function (first, second) { - return first.x === second.x && first.y === second.y; -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/grid.js b/deb/opt/apps/deepin-wine-runner/2048/js/grid.js deleted file mode 100644 index 29f0821..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/grid.js +++ /dev/null @@ -1,117 +0,0 @@ -function Grid(size, previousState) { - this.size = size; - this.cells = previousState ? this.fromState(previousState) : this.empty(); -} - -// Build a grid of the specified size -Grid.prototype.empty = function () { - var cells = []; - - for (var x = 0; x < this.size; x++) { - var row = cells[x] = []; - - for (var y = 0; y < this.size; y++) { - row.push(null); - } - } - - return cells; -}; - -Grid.prototype.fromState = function (state) { - var cells = []; - - for (var x = 0; x < this.size; x++) { - var row = cells[x] = []; - - for (var y = 0; y < this.size; y++) { - var tile = state[x][y]; - row.push(tile ? new Tile(tile.position, tile.value) : null); - } - } - - return cells; -}; - -// Find the first available random position -Grid.prototype.randomAvailableCell = function () { - var cells = this.availableCells(); - - if (cells.length) { - return cells[Math.floor(Math.random() * cells.length)]; - } -}; - -Grid.prototype.availableCells = function () { - var cells = []; - - this.eachCell(function (x, y, tile) { - if (!tile) { - cells.push({ x: x, y: y }); - } - }); - - return cells; -}; - -// Call callback for every cell -Grid.prototype.eachCell = function (callback) { - for (var x = 0; x < this.size; x++) { - for (var y = 0; y < this.size; y++) { - callback(x, y, this.cells[x][y]); - } - } -}; - -// Check if there are any cells available -Grid.prototype.cellsAvailable = function () { - return !!this.availableCells().length; -}; - -// Check if the specified cell is taken -Grid.prototype.cellAvailable = function (cell) { - return !this.cellOccupied(cell); -}; - -Grid.prototype.cellOccupied = function (cell) { - return !!this.cellContent(cell); -}; - -Grid.prototype.cellContent = function (cell) { - if (this.withinBounds(cell)) { - return this.cells[cell.x][cell.y]; - } else { - return null; - } -}; - -// Inserts a tile at its position -Grid.prototype.insertTile = function (tile) { - this.cells[tile.x][tile.y] = tile; -}; - -Grid.prototype.removeTile = function (tile) { - this.cells[tile.x][tile.y] = null; -}; - -Grid.prototype.withinBounds = function (position) { - return position.x >= 0 && position.x < this.size && - position.y >= 0 && position.y < this.size; -}; - -Grid.prototype.serialize = function () { - var cellState = []; - - for (var x = 0; x < this.size; x++) { - var row = cellState[x] = []; - - for (var y = 0; y < this.size; y++) { - row.push(this.cells[x][y] ? this.cells[x][y].serialize() : null); - } - } - - return { - size: this.size, - cells: cellState - }; -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/html_actuator.js b/deb/opt/apps/deepin-wine-runner/2048/js/html_actuator.js deleted file mode 100644 index 6b31f2d..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/html_actuator.js +++ /dev/null @@ -1,139 +0,0 @@ -function HTMLActuator() { - this.tileContainer = document.querySelector(".tile-container"); - this.scoreContainer = document.querySelector(".score-container"); - this.bestContainer = document.querySelector(".best-container"); - this.messageContainer = document.querySelector(".game-message"); - - this.score = 0; -} - -HTMLActuator.prototype.actuate = function (grid, metadata) { - var self = this; - - window.requestAnimationFrame(function () { - self.clearContainer(self.tileContainer); - - grid.cells.forEach(function (column) { - column.forEach(function (cell) { - if (cell) { - self.addTile(cell); - } - }); - }); - - self.updateScore(metadata.score); - self.updateBestScore(metadata.bestScore); - - if (metadata.terminated) { - if (metadata.over) { - self.message(false); // You lose - } else if (metadata.won) { - self.message(true); // You win! - } - } - - }); -}; - -// Continues the game (both restart and keep playing) -HTMLActuator.prototype.continueGame = function () { - this.clearMessage(); -}; - -HTMLActuator.prototype.clearContainer = function (container) { - while (container.firstChild) { - container.removeChild(container.firstChild); - } -}; - -HTMLActuator.prototype.addTile = function (tile) { - var self = this; - - var wrapper = document.createElement("div"); - var inner = document.createElement("div"); - var position = tile.previousPosition || { x: tile.x, y: tile.y }; - var positionClass = this.positionClass(position); - - // We can't use classlist because it somehow glitches when replacing classes - var classes = ["tile", "tile-" + tile.value, positionClass]; - - if (tile.value > 2048) classes.push("tile-super"); - - this.applyClasses(wrapper, classes); - - inner.classList.add("tile-inner"); - inner.textContent = tile.value; - - if (tile.previousPosition) { - // Make sure that the tile gets rendered in the previous position first - window.requestAnimationFrame(function () { - classes[2] = self.positionClass({ x: tile.x, y: tile.y }); - self.applyClasses(wrapper, classes); // Update the position - }); - } else if (tile.mergedFrom) { - classes.push("tile-merged"); - this.applyClasses(wrapper, classes); - - // Render the tiles that merged - tile.mergedFrom.forEach(function (merged) { - self.addTile(merged); - }); - } else { - classes.push("tile-new"); - this.applyClasses(wrapper, classes); - } - - // Add the inner part of the tile to the wrapper - wrapper.appendChild(inner); - - // Put the tile on the board - this.tileContainer.appendChild(wrapper); -}; - -HTMLActuator.prototype.applyClasses = function (element, classes) { - element.setAttribute("class", classes.join(" ")); -}; - -HTMLActuator.prototype.normalizePosition = function (position) { - return { x: position.x + 1, y: position.y + 1 }; -}; - -HTMLActuator.prototype.positionClass = function (position) { - position = this.normalizePosition(position); - return "tile-position-" + position.x + "-" + position.y; -}; - -HTMLActuator.prototype.updateScore = function (score) { - this.clearContainer(this.scoreContainer); - - var difference = score - this.score; - this.score = score; - - this.scoreContainer.textContent = this.score; - - if (difference > 0) { - var addition = document.createElement("div"); - addition.classList.add("score-addition"); - addition.textContent = "+" + difference; - - this.scoreContainer.appendChild(addition); - } -}; - -HTMLActuator.prototype.updateBestScore = function (bestScore) { - this.bestContainer.textContent = bestScore; -}; - -HTMLActuator.prototype.message = function (won) { - var type = won ? "game-won" : "game-over"; - var message = won ? "You win!" : "Game over!"; - - this.messageContainer.classList.add(type); - this.messageContainer.getElementsByTagName("p")[0].textContent = message; -}; - -HTMLActuator.prototype.clearMessage = function () { - // IE only takes one value to remove at a time. - this.messageContainer.classList.remove("game-won"); - this.messageContainer.classList.remove("game-over"); -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/keyboard_input_manager.js b/deb/opt/apps/deepin-wine-runner/2048/js/keyboard_input_manager.js deleted file mode 100644 index ca01b3c..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/keyboard_input_manager.js +++ /dev/null @@ -1,144 +0,0 @@ -function KeyboardInputManager() { - this.events = {}; - - if (window.navigator.msPointerEnabled) { - //Internet Explorer 10 style - this.eventTouchstart = "MSPointerDown"; - this.eventTouchmove = "MSPointerMove"; - this.eventTouchend = "MSPointerUp"; - } else { - this.eventTouchstart = "touchstart"; - this.eventTouchmove = "touchmove"; - this.eventTouchend = "touchend"; - } - - this.listen(); -} - -KeyboardInputManager.prototype.on = function (event, callback) { - if (!this.events[event]) { - this.events[event] = []; - } - this.events[event].push(callback); -}; - -KeyboardInputManager.prototype.emit = function (event, data) { - var callbacks = this.events[event]; - if (callbacks) { - callbacks.forEach(function (callback) { - callback(data); - }); - } -}; - -KeyboardInputManager.prototype.listen = function () { - var self = this; - - var map = { - 38: 0, // Up - 39: 1, // Right - 40: 2, // Down - 37: 3, // Left - 75: 0, // Vim up - 76: 1, // Vim right - 74: 2, // Vim down - 72: 3, // Vim left - 87: 0, // W - 68: 1, // D - 83: 2, // S - 65: 3 // A - }; - - // Respond to direction keys - document.addEventListener("keydown", function (event) { - var modifiers = event.altKey || event.ctrlKey || event.metaKey || - event.shiftKey; - var mapped = map[event.which]; - - if (!modifiers) { - if (mapped !== undefined) { - event.preventDefault(); - self.emit("move", mapped); - } - } - - // R key restarts the game - if (!modifiers && event.which === 82) { - self.restart.call(self, event); - } - }); - - // Respond to button presses - this.bindButtonPress(".retry-button", this.restart); - this.bindButtonPress(".restart-button", this.restart); - this.bindButtonPress(".keep-playing-button", this.keepPlaying); - - // Respond to swipe events - var touchStartClientX, touchStartClientY; - var gameContainer = document.getElementsByClassName("game-container")[0]; - - gameContainer.addEventListener(this.eventTouchstart, function (event) { - if ((!window.navigator.msPointerEnabled && event.touches.length > 1) || - event.targetTouches.length > 1) { - return; // Ignore if touching with more than 1 finger - } - - if (window.navigator.msPointerEnabled) { - touchStartClientX = event.pageX; - touchStartClientY = event.pageY; - } else { - touchStartClientX = event.touches[0].clientX; - touchStartClientY = event.touches[0].clientY; - } - - event.preventDefault(); - }); - - gameContainer.addEventListener(this.eventTouchmove, function (event) { - event.preventDefault(); - }); - - gameContainer.addEventListener(this.eventTouchend, function (event) { - if ((!window.navigator.msPointerEnabled && event.touches.length > 0) || - event.targetTouches.length > 0) { - return; // Ignore if still touching with one or more fingers - } - - var touchEndClientX, touchEndClientY; - - if (window.navigator.msPointerEnabled) { - touchEndClientX = event.pageX; - touchEndClientY = event.pageY; - } else { - touchEndClientX = event.changedTouches[0].clientX; - touchEndClientY = event.changedTouches[0].clientY; - } - - var dx = touchEndClientX - touchStartClientX; - var absDx = Math.abs(dx); - - var dy = touchEndClientY - touchStartClientY; - var absDy = Math.abs(dy); - - if (Math.max(absDx, absDy) > 10) { - // (right : left) : (down : up) - self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0)); - } - }); -}; - -KeyboardInputManager.prototype.restart = function (event) { - event.preventDefault(); - this.emit("restart"); -}; - -KeyboardInputManager.prototype.keepPlaying = function (event) { - event.preventDefault(); - this.emit("keepPlaying"); -}; - -KeyboardInputManager.prototype.bindButtonPress = function (selector, fn) { - var button = document.querySelector(selector); - button.addEventListener("click", fn.bind(this)); - button.addEventListener(this.eventTouchend, fn.bind(this)); -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/local_storage_manager.js b/deb/opt/apps/deepin-wine-runner/2048/js/local_storage_manager.js deleted file mode 100644 index 2ca9cc3..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/local_storage_manager.js +++ /dev/null @@ -1,63 +0,0 @@ -window.fakeStorage = { - _data: {}, - - setItem: function (id, val) { - return this._data[id] = String(val); - }, - - getItem: function (id) { - return this._data.hasOwnProperty(id) ? this._data[id] : undefined; - }, - - removeItem: function (id) { - return delete this._data[id]; - }, - - clear: function () { - return this._data = {}; - } -}; - -function LocalStorageManager() { - this.bestScoreKey = "bestScore"; - this.gameStateKey = "gameState"; - - var supported = this.localStorageSupported(); - this.storage = supported ? window.localStorage : window.fakeStorage; -} - -LocalStorageManager.prototype.localStorageSupported = function () { - var testKey = "test"; - - try { - var storage = window.localStorage; - storage.setItem(testKey, "1"); - storage.removeItem(testKey); - return true; - } catch (error) { - return false; - } -}; - -// Best score getters/setters -LocalStorageManager.prototype.getBestScore = function () { - return this.storage.getItem(this.bestScoreKey) || 0; -}; - -LocalStorageManager.prototype.setBestScore = function (score) { - this.storage.setItem(this.bestScoreKey, score); -}; - -// Game state getters/setters and clearing -LocalStorageManager.prototype.getGameState = function () { - var stateJSON = this.storage.getItem(this.gameStateKey); - return stateJSON ? JSON.parse(stateJSON) : null; -}; - -LocalStorageManager.prototype.setGameState = function (gameState) { - this.storage.setItem(this.gameStateKey, JSON.stringify(gameState)); -}; - -LocalStorageManager.prototype.clearGameState = function () { - this.storage.removeItem(this.gameStateKey); -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/js/tile.js b/deb/opt/apps/deepin-wine-runner/2048/js/tile.js deleted file mode 100644 index 92a670a..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/js/tile.js +++ /dev/null @@ -1,27 +0,0 @@ -function Tile(position, value) { - this.x = position.x; - this.y = position.y; - this.value = value || 2; - - this.previousPosition = null; - this.mergedFrom = null; // Tracks tiles that merged together -} - -Tile.prototype.savePosition = function () { - this.previousPosition = { x: this.x, y: this.y }; -}; - -Tile.prototype.updatePosition = function (position) { - this.x = position.x; - this.y = position.y; -}; - -Tile.prototype.serialize = function () { - return { - position: { - x: this.x, - y: this.y - }, - value: this.value - }; -}; diff --git a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-icon.png b/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-icon.png deleted file mode 100644 index 3fd20f6..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-icon.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x1096.png b/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x1096.png deleted file mode 100644 index 5a68ba0..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x1096.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x920.png b/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x920.png deleted file mode 100644 index 17bc9d8..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/meta/apple-touch-startup-image-640x920.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.eot b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.eot deleted file mode 100755 index 3678ef2..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.eot and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.svg b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.svg deleted file mode 100755 index aa985ae..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.svg +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.woff b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.woff deleted file mode 100755 index 184a945..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Bold-webfont.woff and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.eot b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.eot deleted file mode 100755 index 0dc609d..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.eot and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.svg b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.svg deleted file mode 100755 index 1d5d2ec..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.svg +++ /dev/null @@ -1,670 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.woff b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.woff deleted file mode 100755 index 44555e0..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Light-webfont.woff and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.eot b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.eot deleted file mode 100755 index b020e05..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.eot and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.svg b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.svg deleted file mode 100755 index 1e2cffd..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.svg +++ /dev/null @@ -1,669 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.woff b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.woff deleted file mode 100755 index 9d58858..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/ClearSans-Regular-webfont.woff and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/clear-sans.css b/deb/opt/apps/deepin-wine-runner/2048/style/fonts/clear-sans.css deleted file mode 100755 index de2811d..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/fonts/clear-sans.css +++ /dev/null @@ -1,30 +0,0 @@ -@font-face { - font-family: "Clear Sans"; - src: url("ClearSans-Light-webfont.eot"); - src: url("ClearSans-Light-webfont.eot?#iefix") format("embedded-opentype"), - url("ClearSans-Light-webfont.svg#clear_sans_lightregular") format("svg"), - url("ClearSans-Light-webfont.woff") format("woff"); - font-weight: 200; - font-style: normal; -} - -@font-face { - font-family: "Clear Sans"; - src: url("ClearSans-Regular-webfont.eot"); - src: url("ClearSans-Regular-webfont.eot?#iefix") format("embedded-opentype"), - url("ClearSans-Regular-webfont.svg#clear_sansregular") format("svg"), - url("ClearSans-Regular-webfont.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "Clear Sans"; - src: url("ClearSans-Bold-webfont.eot"); - src: url("ClearSans-Bold-webfont.eot?#iefix") format("embedded-opentype"), - url("ClearSans-Bold-webfont.svg#clear_sansbold") format("svg"), - url("ClearSans-Bold-webfont.woff") format("woff"); - font-weight: 700; - font-style: normal; -} - diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/helpers.scss b/deb/opt/apps/deepin-wine-runner/2048/style/helpers.scss deleted file mode 100644 index 72693ee..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/helpers.scss +++ /dev/null @@ -1,82 +0,0 @@ -// Exponent -// From: https://github.com/Team-Sass/Sassy-math/blob/master/sass/math.scss#L36 - -@function exponent($base, $exponent) { - // reset value - $value: $base; - // positive intergers get multiplied - @if $exponent > 1 { - @for $i from 2 through $exponent { - $value: $value * $base; } } - // negitive intergers get divided. A number divided by itself is 1 - @if $exponent < 1 { - @for $i from 0 through -$exponent { - $value: $value / $base; } } - // return the last value written - @return $value; -} - -@function pow($base, $exponent) { - @return exponent($base, $exponent); -} - -// Transition mixins -@mixin transition($args...) { - -webkit-transition: $args; - -moz-transition: $args; - transition: $args; -} - -@mixin transition-property($args...) { - -webkit-transition-property: $args; - -moz-transition-property: $args; - transition-property: $args; -} - -@mixin animation($args...) { - -webkit-animation: $args; - -moz-animation: $args; - animation: $args; -} - -@mixin animation-fill-mode($args...) { - -webkit-animation-fill-mode: $args; - -moz-animation-fill-mode: $args; - animation-fill-mode: $args; -} - -@mixin transform($args...) { - -webkit-transform: $args; - -moz-transform: $args; - -ms-transform: $args; - transform: $args; -} - -// Keyframe animations -@mixin keyframes($animation-name) { - @-webkit-keyframes $animation-name { - @content; - } - @-moz-keyframes $animation-name { - @content; - } - @keyframes $animation-name { - @content; - } -} - -// Media queries -@mixin smaller($width) { - @media screen and (max-width: $width) { - @content; - } -} - -// Clearfix -@mixin clearfix { - &:after { - content: ""; - display: block; - clear: both; - } -} diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/main.css b/deb/opt/apps/deepin-wine-runner/2048/style/main.css deleted file mode 100644 index ea3cb19..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/main.css +++ /dev/null @@ -1,758 +0,0 @@ -@import url(fonts/clear-sans.css); -html, body { - margin: 0; - padding: 0; - background: #faf8ef; - color: #776e65; - font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif; - font-size: 18px; } - -body { - margin: 80px 0; } - -.heading:after { - content: ""; - display: block; - clear: both; } - -h1.title { - font-size: 80px; - font-weight: bold; - margin: 0; - display: block; - float: left; } - -@-webkit-keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } -@-moz-keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } -@keyframes move-up { - 0% { - top: 25px; - opacity: 1; } - - 100% { - top: -50px; - opacity: 0; } } -.scores-container { - float: right; - text-align: right; } - -.score-container, .best-container { - position: relative; - display: inline-block; - background: #bbada0; - padding: 15px 25px; - font-size: 25px; - height: 25px; - line-height: 47px; - font-weight: bold; - border-radius: 3px; - color: white; - margin-top: 8px; - text-align: center; } - .score-container:after, .best-container:after { - position: absolute; - width: 100%; - top: 10px; - left: 0; - text-transform: uppercase; - font-size: 13px; - line-height: 13px; - text-align: center; - color: #eee4da; } - .score-container .score-addition, .best-container .score-addition { - position: absolute; - right: 30px; - color: red; - font-size: 25px; - line-height: 25px; - font-weight: bold; - color: rgba(119, 110, 101, 0.9); - z-index: 100; - -webkit-animation: move-up 600ms ease-in; - -moz-animation: move-up 600ms ease-in; - animation: move-up 600ms ease-in; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; } - -.score-container:after { - content: "Score"; } - -.best-container:after { - content: "Best"; } - -p { - margin-top: 0; - margin-bottom: 10px; - line-height: 1.65; } - -a { - color: #776e65; - font-weight: bold; - text-decoration: underline; - cursor: pointer; } - -strong.important { - text-transform: uppercase; } - -hr { - border: none; - border-bottom: 1px solid #d8d4d0; - margin-top: 20px; - margin-bottom: 30px; } - -.container { - width: 500px; - margin: 0 auto; } - -@-webkit-keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } -@-moz-keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } -@keyframes fade-in { - 0% { - opacity: 0; } - - 100% { - opacity: 1; } } -.game-container { - margin-top: 40px; - position: relative; - padding: 15px; - cursor: default; - -webkit-touch-callout: none; - -ms-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -ms-touch-action: none; - touch-action: none; - background: #bbada0; - border-radius: 6px; - width: 500px; - height: 500px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .game-container .game-message { - display: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba(238, 228, 218, 0.5); - z-index: 100; - text-align: center; - -webkit-animation: fade-in 800ms ease 1200ms; - -moz-animation: fade-in 800ms ease 1200ms; - animation: fade-in 800ms ease 1200ms; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; } - .game-container .game-message p { - font-size: 60px; - font-weight: bold; - height: 60px; - line-height: 60px; - margin-top: 222px; } - .game-container .game-message .lower { - display: block; - margin-top: 59px; } - .game-container .game-message a { - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - margin-left: 9px; } - .game-container .game-message a.keep-playing-button { - display: none; } - .game-container .game-message.game-won { - background: rgba(237, 194, 46, 0.5); - color: #f9f6f2; } - .game-container .game-message.game-won a.keep-playing-button { - display: inline-block; } - .game-container .game-message.game-won, .game-container .game-message.game-over { - display: block; } - -.grid-container { - position: absolute; - z-index: 1; } - -.grid-row { - margin-bottom: 15px; } - .grid-row:last-child { - margin-bottom: 0; } - .grid-row:after { - content: ""; - display: block; - clear: both; } - -.grid-cell { - width: 106.25px; - height: 106.25px; - margin-right: 15px; - float: left; - border-radius: 3px; - background: rgba(238, 228, 218, 0.35); } - .grid-cell:last-child { - margin-right: 0; } - -.tile-container { - position: absolute; - z-index: 2; } - -.tile, .tile .tile-inner { - width: 107px; - height: 107px; - line-height: 107px; } -.tile.tile-position-1-1 { - -webkit-transform: translate(0px, 0px); - -moz-transform: translate(0px, 0px); - -ms-transform: translate(0px, 0px); - transform: translate(0px, 0px); } -.tile.tile-position-1-2 { - -webkit-transform: translate(0px, 121px); - -moz-transform: translate(0px, 121px); - -ms-transform: translate(0px, 121px); - transform: translate(0px, 121px); } -.tile.tile-position-1-3 { - -webkit-transform: translate(0px, 242px); - -moz-transform: translate(0px, 242px); - -ms-transform: translate(0px, 242px); - transform: translate(0px, 242px); } -.tile.tile-position-1-4 { - -webkit-transform: translate(0px, 363px); - -moz-transform: translate(0px, 363px); - -ms-transform: translate(0px, 363px); - transform: translate(0px, 363px); } -.tile.tile-position-2-1 { - -webkit-transform: translate(121px, 0px); - -moz-transform: translate(121px, 0px); - -ms-transform: translate(121px, 0px); - transform: translate(121px, 0px); } -.tile.tile-position-2-2 { - -webkit-transform: translate(121px, 121px); - -moz-transform: translate(121px, 121px); - -ms-transform: translate(121px, 121px); - transform: translate(121px, 121px); } -.tile.tile-position-2-3 { - -webkit-transform: translate(121px, 242px); - -moz-transform: translate(121px, 242px); - -ms-transform: translate(121px, 242px); - transform: translate(121px, 242px); } -.tile.tile-position-2-4 { - -webkit-transform: translate(121px, 363px); - -moz-transform: translate(121px, 363px); - -ms-transform: translate(121px, 363px); - transform: translate(121px, 363px); } -.tile.tile-position-3-1 { - -webkit-transform: translate(242px, 0px); - -moz-transform: translate(242px, 0px); - -ms-transform: translate(242px, 0px); - transform: translate(242px, 0px); } -.tile.tile-position-3-2 { - -webkit-transform: translate(242px, 121px); - -moz-transform: translate(242px, 121px); - -ms-transform: translate(242px, 121px); - transform: translate(242px, 121px); } -.tile.tile-position-3-3 { - -webkit-transform: translate(242px, 242px); - -moz-transform: translate(242px, 242px); - -ms-transform: translate(242px, 242px); - transform: translate(242px, 242px); } -.tile.tile-position-3-4 { - -webkit-transform: translate(242px, 363px); - -moz-transform: translate(242px, 363px); - -ms-transform: translate(242px, 363px); - transform: translate(242px, 363px); } -.tile.tile-position-4-1 { - -webkit-transform: translate(363px, 0px); - -moz-transform: translate(363px, 0px); - -ms-transform: translate(363px, 0px); - transform: translate(363px, 0px); } -.tile.tile-position-4-2 { - -webkit-transform: translate(363px, 121px); - -moz-transform: translate(363px, 121px); - -ms-transform: translate(363px, 121px); - transform: translate(363px, 121px); } -.tile.tile-position-4-3 { - -webkit-transform: translate(363px, 242px); - -moz-transform: translate(363px, 242px); - -ms-transform: translate(363px, 242px); - transform: translate(363px, 242px); } -.tile.tile-position-4-4 { - -webkit-transform: translate(363px, 363px); - -moz-transform: translate(363px, 363px); - -ms-transform: translate(363px, 363px); - transform: translate(363px, 363px); } - -.tile { - position: absolute; - -webkit-transition: 100ms ease-in-out; - -moz-transition: 100ms ease-in-out; - transition: 100ms ease-in-out; - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - transition-property: transform; } - .tile .tile-inner { - border-radius: 3px; - background: #eee4da; - text-align: center; - font-weight: bold; - z-index: 10; - font-size: 55px; } - .tile.tile-2 .tile-inner { - background: #eee4da; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } - .tile.tile-4 .tile-inner { - background: #ede0c8; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); } - .tile.tile-8 .tile-inner { - color: #f9f6f2; - background: #f2b179; } - .tile.tile-16 .tile-inner { - color: #f9f6f2; - background: #f59563; } - .tile.tile-32 .tile-inner { - color: #f9f6f2; - background: #f67c5f; } - .tile.tile-64 .tile-inner { - color: #f9f6f2; - background: #f65e3b; } - .tile.tile-128 .tile-inner { - color: #f9f6f2; - background: #edcf72; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.2381), inset 0 0 0 1px rgba(255, 255, 255, 0.14286); - font-size: 45px; } - @media screen and (max-width: 520px) { - .tile.tile-128 .tile-inner { - font-size: 25px; } } - .tile.tile-256 .tile-inner { - color: #f9f6f2; - background: #edcc61; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.31746), inset 0 0 0 1px rgba(255, 255, 255, 0.19048); - font-size: 45px; } - @media screen and (max-width: 520px) { - .tile.tile-256 .tile-inner { - font-size: 25px; } } - .tile.tile-512 .tile-inner { - color: #f9f6f2; - background: #edc850; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.39683), inset 0 0 0 1px rgba(255, 255, 255, 0.2381); - font-size: 45px; } - @media screen and (max-width: 520px) { - .tile.tile-512 .tile-inner { - font-size: 25px; } } - .tile.tile-1024 .tile-inner { - color: #f9f6f2; - background: #edc53f; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.47619), inset 0 0 0 1px rgba(255, 255, 255, 0.28571); - font-size: 35px; } - @media screen and (max-width: 520px) { - .tile.tile-1024 .tile-inner { - font-size: 15px; } } - .tile.tile-2048 .tile-inner { - color: #f9f6f2; - background: #edc22e; - box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.55556), inset 0 0 0 1px rgba(255, 255, 255, 0.33333); - font-size: 35px; } - @media screen and (max-width: 520px) { - .tile.tile-2048 .tile-inner { - font-size: 15px; } } - .tile.tile-super .tile-inner { - color: #f9f6f2; - background: #3c3a32; - font-size: 30px; } - @media screen and (max-width: 520px) { - .tile.tile-super .tile-inner { - font-size: 10px; } } - -@-webkit-keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -@-moz-keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -@keyframes appear { - 0% { - opacity: 0; - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -.tile-new .tile-inner { - -webkit-animation: appear 200ms ease 100ms; - -moz-animation: appear 200ms ease 100ms; - animation: appear 200ms ease 100ms; - -webkit-animation-fill-mode: backwards; - -moz-animation-fill-mode: backwards; - animation-fill-mode: backwards; } - -@-webkit-keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - -ms-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -@-moz-keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - -ms-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -@keyframes pop { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); } - - 50% { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - -ms-transform: scale(1.2); - transform: scale(1.2); } - - 100% { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); } } -.tile-merged .tile-inner { - z-index: 20; - -webkit-animation: pop 200ms ease 100ms; - -moz-animation: pop 200ms ease 100ms; - animation: pop 200ms ease 100ms; - -webkit-animation-fill-mode: backwards; - -moz-animation-fill-mode: backwards; - animation-fill-mode: backwards; } - -.above-game:after { - content: ""; - display: block; - clear: both; } - -.game-intro { - float: left; - line-height: 42px; - margin-bottom: 0; } - -.restart-button { - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - display: block; - text-align: center; - float: right; } - -.game-explanation { - margin-top: 50px; } - -@media screen and (max-width: 520px) { - html, body { - font-size: 15px; } - - body { - margin: 20px 0; - padding: 0 20px; } - - h1.title { - font-size: 27px; - margin-top: 15px; } - - .container { - width: 280px; - margin: 0 auto; } - - .score-container, .best-container { - margin-top: 0; - padding: 15px 10px; - min-width: 40px; } - - .heading { - margin-bottom: 10px; } - - .game-intro { - width: 55%; - display: block; - box-sizing: border-box; - line-height: 1.65; } - - .restart-button { - width: 42%; - padding: 0; - display: block; - box-sizing: border-box; - margin-top: 2px; } - - .game-container { - margin-top: 17px; - position: relative; - padding: 10px; - cursor: default; - -webkit-touch-callout: none; - -ms-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -ms-touch-action: none; - touch-action: none; - background: #bbada0; - border-radius: 6px; - width: 280px; - height: 280px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .game-container .game-message { - display: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba(238, 228, 218, 0.5); - z-index: 100; - text-align: center; - -webkit-animation: fade-in 800ms ease 1200ms; - -moz-animation: fade-in 800ms ease 1200ms; - animation: fade-in 800ms ease 1200ms; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - animation-fill-mode: both; } - .game-container .game-message p { - font-size: 60px; - font-weight: bold; - height: 60px; - line-height: 60px; - margin-top: 222px; } - .game-container .game-message .lower { - display: block; - margin-top: 59px; } - .game-container .game-message a { - display: inline-block; - background: #8f7a66; - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: #f9f6f2; - height: 40px; - line-height: 42px; - margin-left: 9px; } - .game-container .game-message a.keep-playing-button { - display: none; } - .game-container .game-message.game-won { - background: rgba(237, 194, 46, 0.5); - color: #f9f6f2; } - .game-container .game-message.game-won a.keep-playing-button { - display: inline-block; } - .game-container .game-message.game-won, .game-container .game-message.game-over { - display: block; } - - .grid-container { - position: absolute; - z-index: 1; } - - .grid-row { - margin-bottom: 10px; } - .grid-row:last-child { - margin-bottom: 0; } - .grid-row:after { - content: ""; - display: block; - clear: both; } - - .grid-cell { - width: 57.5px; - height: 57.5px; - margin-right: 10px; - float: left; - border-radius: 3px; - background: rgba(238, 228, 218, 0.35); } - .grid-cell:last-child { - margin-right: 0; } - - .tile-container { - position: absolute; - z-index: 2; } - - .tile, .tile .tile-inner { - width: 58px; - height: 58px; - line-height: 58px; } - .tile.tile-position-1-1 { - -webkit-transform: translate(0px, 0px); - -moz-transform: translate(0px, 0px); - -ms-transform: translate(0px, 0px); - transform: translate(0px, 0px); } - .tile.tile-position-1-2 { - -webkit-transform: translate(0px, 67px); - -moz-transform: translate(0px, 67px); - -ms-transform: translate(0px, 67px); - transform: translate(0px, 67px); } - .tile.tile-position-1-3 { - -webkit-transform: translate(0px, 135px); - -moz-transform: translate(0px, 135px); - -ms-transform: translate(0px, 135px); - transform: translate(0px, 135px); } - .tile.tile-position-1-4 { - -webkit-transform: translate(0px, 202px); - -moz-transform: translate(0px, 202px); - -ms-transform: translate(0px, 202px); - transform: translate(0px, 202px); } - .tile.tile-position-2-1 { - -webkit-transform: translate(67px, 0px); - -moz-transform: translate(67px, 0px); - -ms-transform: translate(67px, 0px); - transform: translate(67px, 0px); } - .tile.tile-position-2-2 { - -webkit-transform: translate(67px, 67px); - -moz-transform: translate(67px, 67px); - -ms-transform: translate(67px, 67px); - transform: translate(67px, 67px); } - .tile.tile-position-2-3 { - -webkit-transform: translate(67px, 135px); - -moz-transform: translate(67px, 135px); - -ms-transform: translate(67px, 135px); - transform: translate(67px, 135px); } - .tile.tile-position-2-4 { - -webkit-transform: translate(67px, 202px); - -moz-transform: translate(67px, 202px); - -ms-transform: translate(67px, 202px); - transform: translate(67px, 202px); } - .tile.tile-position-3-1 { - -webkit-transform: translate(135px, 0px); - -moz-transform: translate(135px, 0px); - -ms-transform: translate(135px, 0px); - transform: translate(135px, 0px); } - .tile.tile-position-3-2 { - -webkit-transform: translate(135px, 67px); - -moz-transform: translate(135px, 67px); - -ms-transform: translate(135px, 67px); - transform: translate(135px, 67px); } - .tile.tile-position-3-3 { - -webkit-transform: translate(135px, 135px); - -moz-transform: translate(135px, 135px); - -ms-transform: translate(135px, 135px); - transform: translate(135px, 135px); } - .tile.tile-position-3-4 { - -webkit-transform: translate(135px, 202px); - -moz-transform: translate(135px, 202px); - -ms-transform: translate(135px, 202px); - transform: translate(135px, 202px); } - .tile.tile-position-4-1 { - -webkit-transform: translate(202px, 0px); - -moz-transform: translate(202px, 0px); - -ms-transform: translate(202px, 0px); - transform: translate(202px, 0px); } - .tile.tile-position-4-2 { - -webkit-transform: translate(202px, 67px); - -moz-transform: translate(202px, 67px); - -ms-transform: translate(202px, 67px); - transform: translate(202px, 67px); } - .tile.tile-position-4-3 { - -webkit-transform: translate(202px, 135px); - -moz-transform: translate(202px, 135px); - -ms-transform: translate(202px, 135px); - transform: translate(202px, 135px); } - .tile.tile-position-4-4 { - -webkit-transform: translate(202px, 202px); - -moz-transform: translate(202px, 202px); - -ms-transform: translate(202px, 202px); - transform: translate(202px, 202px); } - - .tile .tile-inner { - font-size: 35px; } - - .game-message p { - font-size: 30px !important; - height: 30px !important; - line-height: 30px !important; - margin-top: 90px !important; } - .game-message .lower { - margin-top: 30px !important; } } diff --git a/deb/opt/apps/deepin-wine-runner/2048/style/main.scss b/deb/opt/apps/deepin-wine-runner/2048/style/main.scss deleted file mode 100644 index b0ec8da..0000000 --- a/deb/opt/apps/deepin-wine-runner/2048/style/main.scss +++ /dev/null @@ -1,549 +0,0 @@ -@import "helpers"; -@import "fonts/clear-sans.css"; - -$field-width: 500px; -$grid-spacing: 15px; -$grid-row-cells: 4; -$tile-size: ($field-width - $grid-spacing * ($grid-row-cells + 1)) / $grid-row-cells; -$tile-border-radius: 3px; - -$mobile-threshold: $field-width + 20px; - -$text-color: #776E65; -$bright-text-color: #f9f6f2; - -$tile-color: #eee4da; -$tile-gold-color: #edc22e; -$tile-gold-glow-color: lighten($tile-gold-color, 15%); - -$game-container-margin-top: 40px; -$game-container-background: #bbada0; - -$transition-speed: 100ms; - -html, body { - margin: 0; - padding: 0; - - background: #faf8ef; - color: $text-color; - font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif; - font-size: 18px; -} - -body { - margin: 80px 0; -} - -.heading { - @include clearfix; -} - -h1.title { - font-size: 80px; - font-weight: bold; - margin: 0; - display: block; - float: left; -} - -@include keyframes(move-up) { - 0% { - top: 25px; - opacity: 1; - } - - 100% { - top: -50px; - opacity: 0; - } -} - -.scores-container { - float: right; - text-align: right; -} - -.score-container, .best-container { - $height: 25px; - - position: relative; - display: inline-block; - background: $game-container-background; - padding: 15px 25px; - font-size: $height; - height: $height; - line-height: $height + 22px; - font-weight: bold; - border-radius: 3px; - color: white; - margin-top: 8px; - text-align: center; - - &:after { - position: absolute; - width: 100%; - top: 10px; - left: 0; - text-transform: uppercase; - font-size: 13px; - line-height: 13px; - text-align: center; - color: $tile-color; - } - - .score-addition { - position: absolute; - right: 30px; - color: red; - font-size: $height; - line-height: $height; - font-weight: bold; - color: rgba($text-color, .9); - z-index: 100; - @include animation(move-up 600ms ease-in); - @include animation-fill-mode(both); - } -} - -.score-container:after { - content: "Score"; -} - -.best-container:after { - content: "Best"; -} - -p { - margin-top: 0; - margin-bottom: 10px; - line-height: 1.65; -} - -a { - color: $text-color; - font-weight: bold; - text-decoration: underline; - cursor: pointer; -} - -strong { - &.important { - text-transform: uppercase; - } -} - -hr { - border: none; - border-bottom: 1px solid lighten($text-color, 40%); - margin-top: 20px; - margin-bottom: 30px; -} - -.container { - width: $field-width; - margin: 0 auto; -} - -@include keyframes(fade-in) { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -// Styles for buttons -@mixin button { - display: inline-block; - background: darken($game-container-background, 20%); - border-radius: 3px; - padding: 0 20px; - text-decoration: none; - color: $bright-text-color; - height: 40px; - line-height: 42px; -} - -// Game field mixin used to render CSS at different width -@mixin game-field { - .game-container { - margin-top: $game-container-margin-top; - position: relative; - padding: $grid-spacing; - - cursor: default; - -webkit-touch-callout: none; - -ms-touch-callout: none; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - - -ms-touch-action: none; - touch-action: none; - - background: $game-container-background; - border-radius: $tile-border-radius * 2; - width: $field-width; - height: $field-width; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - - .game-message { - display: none; - - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: rgba($tile-color, .5); - z-index: 100; - - text-align: center; - - p { - font-size: 60px; - font-weight: bold; - height: 60px; - line-height: 60px; - margin-top: 222px; - // height: $field-width; - // line-height: $field-width; - } - - .lower { - display: block; - margin-top: 59px; - } - - a { - @include button; - margin-left: 9px; - // margin-top: 59px; - - &.keep-playing-button { - display: none; - } - } - - @include animation(fade-in 800ms ease $transition-speed * 12); - @include animation-fill-mode(both); - - &.game-won { - background: rgba($tile-gold-color, .5); - color: $bright-text-color; - - a.keep-playing-button { - display: inline-block; - } - } - - &.game-won, &.game-over { - display: block; - } - } - } - - .grid-container { - position: absolute; - z-index: 1; - } - - .grid-row { - margin-bottom: $grid-spacing; - - &:last-child { - margin-bottom: 0; - } - - &:after { - content: ""; - display: block; - clear: both; - } - } - - .grid-cell { - width: $tile-size; - height: $tile-size; - margin-right: $grid-spacing; - float: left; - - border-radius: $tile-border-radius; - - background: rgba($tile-color, .35); - - &:last-child { - margin-right: 0; - } - } - - .tile-container { - position: absolute; - z-index: 2; - } - - .tile { - &, .tile-inner { - width: ceil($tile-size); - height: ceil($tile-size); - line-height: ceil($tile-size); - } - - // Build position classes - @for $x from 1 through $grid-row-cells { - @for $y from 1 through $grid-row-cells { - &.tile-position-#{$x}-#{$y} { - $xPos: floor(($tile-size + $grid-spacing) * ($x - 1)); - $yPos: floor(($tile-size + $grid-spacing) * ($y - 1)); - @include transform(translate($xPos, $yPos)); - } - } - } - } -} - -// End of game-field mixin -@include game-field; - -.tile { - position: absolute; // Makes transforms relative to the top-left corner - - .tile-inner { - border-radius: $tile-border-radius; - - background: $tile-color; - text-align: center; - font-weight: bold; - z-index: 10; - - font-size: 55px; - } - - // Movement transition - @include transition($transition-speed ease-in-out); - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - transition-property: transform; - - $base: 2; - $exponent: 1; - $limit: 11; - - // Colors for all 11 states, false = no special color - $special-colors: false false, // 2 - false false, // 4 - #f78e48 true, // 8 - #fc5e2e true, // 16 - #ff3333 true, // 32 - #ff0000 true, // 64 - false true, // 128 - false true, // 256 - false true, // 512 - false true, // 1024 - false true; // 2048 - - // Build tile colors - @while $exponent <= $limit { - $power: pow($base, $exponent); - - &.tile-#{$power} .tile-inner { - // Calculate base background color - $gold-percent: ($exponent - 1) / ($limit - 1) * 100; - $mixed-background: mix($tile-gold-color, $tile-color, $gold-percent); - - $nth-color: nth($special-colors, $exponent); - - $special-background: nth($nth-color, 1); - $bright-color: nth($nth-color, 2); - - @if $special-background { - $mixed-background: mix($special-background, $mixed-background, 55%); - } - - @if $bright-color { - color: $bright-text-color; - } - - // Set background - background: $mixed-background; - - // Add glow - $glow-opacity: max($exponent - 4, 0) / ($limit - 4); - - @if not $special-background { - box-shadow: 0 0 30px 10px rgba($tile-gold-glow-color, $glow-opacity / 1.8), - inset 0 0 0 1px rgba(white, $glow-opacity / 3); - } - - // Adjust font size for bigger numbers - @if $power >= 100 and $power < 1000 { - font-size: 45px; - - // Media queries placed here to avoid carrying over the rest of the logic - @include smaller($mobile-threshold) { - font-size: 25px; - } - } @else if $power >= 1000 { - font-size: 35px; - - @include smaller($mobile-threshold) { - font-size: 15px; - } - } - } - - $exponent: $exponent + 1; - } - - // Super tiles (above 2048) - &.tile-super .tile-inner { - color: $bright-text-color; - background: mix(#333, $tile-gold-color, 95%); - - font-size: 30px; - - @include smaller($mobile-threshold) { - font-size: 10px; - } - } -} - -@include keyframes(appear) { - 0% { - opacity: 0; - @include transform(scale(0)); - } - - 100% { - opacity: 1; - @include transform(scale(1)); - } -} - -.tile-new .tile-inner { - @include animation(appear 200ms ease $transition-speed); - @include animation-fill-mode(backwards); -} - -@include keyframes(pop) { - 0% { - @include transform(scale(0)); - } - - 50% { - @include transform(scale(1.2)); - } - - 100% { - @include transform(scale(1)); - } -} - -.tile-merged .tile-inner { - z-index: 20; - @include animation(pop 200ms ease $transition-speed); - @include animation-fill-mode(backwards); -} - -.above-game { - @include clearfix; -} - -.game-intro { - float: left; - line-height: 42px; - margin-bottom: 0; -} - -.restart-button { - @include button; - display: block; - text-align: center; - float: right; -} - -.game-explanation { - margin-top: 50px; -} - -@include smaller($mobile-threshold) { - // Redefine variables for smaller screens - $field-width: 280px; - $grid-spacing: 10px; - $grid-row-cells: 4; - $tile-size: ($field-width - $grid-spacing * ($grid-row-cells + 1)) / $grid-row-cells; - $tile-border-radius: 3px; - $game-container-margin-top: 17px; - - html, body { - font-size: 15px; - } - - body { - margin: 20px 0; - padding: 0 20px; - } - - h1.title { - font-size: 27px; - margin-top: 15px; - } - - .container { - width: $field-width; - margin: 0 auto; - } - - .score-container, .best-container { - margin-top: 0; - padding: 15px 10px; - min-width: 40px; - } - - .heading { - margin-bottom: 10px; - } - - // Show intro and restart button side by side - .game-intro { - width: 55%; - display: block; - box-sizing: border-box; - line-height: 1.65; - } - - .restart-button { - width: 42%; - padding: 0; - display: block; - box-sizing: border-box; - margin-top: 2px; - } - - // Render the game field at the right width - @include game-field; - - // Rest of the font-size adjustments in the tile class - .tile .tile-inner { - font-size: 35px; - } - - .game-message { - p { - font-size: 30px !important; - height: 30px !important; - line-height: 30px !important; - margin-top: 90px !important; - } - - .lower { - margin-top: 30px !important; - } - } -} diff --git a/deb/opt/apps/deepin-wine-runner/API/Python/__init__.py b/deb/opt/apps/deepin-wine-runner/API/Python/__init__.py deleted file mode 100755 index 8a050b7..0000000 --- a/deb/opt/apps/deepin-wine-runner/API/Python/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.4.0 -# 更新时间:2022年10月15日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 加入路径 -################# -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -################# -# 引入所需的库(正式内容) -################# -import os -import sys -import ConfigLanguareRunner -class Old: - wine = "" - wineprefix = "" - def __init__(self, wine = "", wineprefix = "") -> None: - self.wine = os.getenv("WINE") if wine == "" else wine - self.wineprefix = os.getenv("WINEPREFIX") if wine == "" else wineprefix - - def runCommand(self, command: str) -> None: - com = ConfigLanguareRunner.Command(command) - print(com.GetCommandList()) - return com.Run(com.GetCommandList(), self.wineprefix, self.wine) - - def runList(self, command: list) -> None: - return ConfigLanguareRunner.Command("").Run(command, self.wineprefix, self.wine) - -class Bash: - wine = "" - wineprefix = "" - def __init__(self, wine = "", wineprefix = "") -> None: - self.wine = os.getenv("WINE") if wine == "" else wine - self.wineprefix = os.getenv("WINEPREFIX") if wine == "" else wineprefix - - def runCommand(self, command: str) -> int: - return os.system(f"'{programPath}/../../AutoShell/main.py' -c \"{command}\"") - - def runList(self, command: list) -> int: - commandStr = "" - for k in command: - for i in k: - commandStr += f"'{i}' " - commandStr += ";" - return os.system(f"'{programPath}/../../AutoShell/main.py' -c \"{commandStr}\"") diff --git a/deb/opt/apps/deepin-wine-runner/AllInstall.py b/deb/opt/apps/deepin-wine-runner/AllInstall.py deleted file mode 100755 index 84fa825..0000000 --- a/deb/opt/apps/deepin-wine-runner/AllInstall.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import updatekiller - -def AddSparkStoreSource(): - # Download and install key - os.system("mkdir -p /tmp/spark-store-install") - os.system("wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc") - os.system("sudo gpg --dearmor /tmp/spark-store-install/spark-store.asc") - os.system("cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg") - # Run apt update to avoid users being fucked up by the non-exist dependency problem - os.system("sudo apt update -o Dir::Etc::sourcelist=\"sources.list.d/sparkstore.list\" -o Dir::Etc::sourceparts=\"-\" -o APT::Get::List-Cleanup=\"0\"") - -def InstallSparkWine(wine): - #if os.path.exists("/usr/local/bin/ss-apt-fast"): - #os.system("sudo apt install apt-fast -y") - #os.system(f"sudo ss-apt-fast install \"{wine}\" -y") - #return - #os.system("sudo ss-apt-fast update") - if not os.system("which aptss"): - os.system(f"sudo aptss install \"{wine}\" -y") - elif not os.system("which ss-apt-fast"): - os.system("sudo ss-apt-fast update") - os.system(f"sudo ss-apt-fast install \"{wine}\" -y") - elif not os.system("which apt-fast"): - os.system(f"sudo apt-fast install \"{wine}\" -y") - else: - os.system(f"sudo apt install \"{wine}\" -y") - -################### -# 程序功能 -################### -print(''' -m m " -# # # mmm m mm mmm -" #"# # # #" # #" # - ## ##" # # # #"""" - # # mm#mm # # "#mm" - - -''') -print("请保证你能有 root 权限以便安装") -print("如果有请按回车,否则按 [Ctrl+C] 退出", end=' ') -input() -os.system("sudo apt update") -print("请问是否要更新操作系统?[Y/N]", end=' ') -choose = input().upper() -if not choose == "N": - os.system("sudo apt upgrade -y") -if os.system("which wine > /dev/null"): - print("请问是否要安装原版 wine(wine64)?[Y/N]", end=' ') - choose = input().upper() - if not choose == "N": - os.system("sudo apt install wine -y") -if os.system("which deepin-wine > /dev/null"): - print("请问是否要安装 deepin-wine?[Y/N]", end=' ') - choose = input().upper() - if not choose == "N": - os.system("sudo apt install deepin-wine -y") -if os.system("which deepin-wine5 > /dev/null"): - print("请问是否要安装 deepin-wine5(需要安装最新版星火应用商店)?[Y/N]", end=' ') - choose = input().upper() -if os.system("which deepin-wine5-stable > /dev/null"): - print("请问是否要安装 deepin-wine5-stable?[Y/N]", end=' ') - choose = input().upper() - if not choose == "N": - os.system("sudo apt install deepin-wine5-stable -y") -if os.system("which deepin-wine6-stable > /dev/null"): - print("请问是否要安装 deepin-wine6-stable?[Y/N]", end=' ') - choose = input().upper() - if not choose == "N": - os.system("sudo apt install deepin-wine6-stable -y") -if os.system("which spark-wine7-devel > /dev/null"): - print("请问是否要安装 spark-wine7-devel(需要安装最新版星火应用商店)?[Y/N]", end=' ') - choose = input().upper() - if not choose == "N": - InstallSparkWine("spark-wine7-devel") -if os.system("which ukylin-wine > /dev/null"): - print("请问是否要安装 ukylin-wine(需要添加 ukylin 源,但因为可能会导致系统问题,将不会自动添加)?[Y/N]", end=" ") - choose = input().upper() - if not choose == "N": - os.system("sudo apt install ukylin-wine -y") -print("全部完成!") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AppStore.py b/deb/opt/apps/deepin-wine-runner/AppStore.py deleted file mode 100755 index c1068f3..0000000 --- a/deb/opt/apps/deepin-wine-runner/AppStore.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:1.8.0 -# 更新时间:2022年08月01日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import pyquery -import updatekiller -import req as requests -import urllib.parse as parse - -def CleanTerminal(): - os.system("clear") - print(''' - mm mmmm m - ## mmmm mmmm #" " mm#mm mmm m mm mmm - # # #" "# #" "# "#mmm # #" "# #" " #" # - #mm# # # # # "# # # # # #"""" - # # ##m#" ##m#" "mmm#" "mm "#m#" # "#mm" - # # - " " -''') - print("本软件源来自腾讯软件管家,只会下载文件后缀为“.exe”的文件") - print("请输入要搜索的内容,如果要结束,请输入“exit”或点击右上角“×”关闭") - print("无法保证从这里下载的安装包能正常安装/运行") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装指定应用") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二") - print("参数一为需要安装的容器,参数二为需要使用的wine,两个参数位置不能颠倒") - sys.exit() - - CleanTerminal() - while True: - search = input(">") - if search.replace(" ", "").replace("\n", "") == "": - continue - if search.lower() == "exit": # 输入“exit” - break # 结束程序 - - # 获取初步 API - try: - apiReturn = json.loads(requests.get(f"https://s.pcmgr.qq.com/tapi/web/searchcgi.php?type=search&callback=searchCallback&keyword={parse.quote(search)}&page=1&pernum=30").text[:-2][15:]) - except: - #traceback.print_exc() - input("无法连接服务器,按回车键继续") - CleanTerminal() - continue - option = 0 - downloadUrl = [] - if not "list" in apiReturn: - print("没有搜到结果,尝试换一个关键词试试") - input("按回车键继续") - CleanTerminal() - continue - for i in apiReturn["list"]: # 遍历选项 - htmlShow = i["xmlInfo"] - url = pyquery.PyQuery(htmlShow)("url").text() - if url[-3:] != "exe": # 格式非 exe,忽略 - continue - print(option, i["SoftName"], url) - downloadUrl.append(url) - option += 1 - - if option == 0: - print("没有搜到结果,尝试换一个关键词试试") - input("按回车键继续") - CleanTerminal() - continue - while True: - try: - choose = input("请输入选项编号(输入“exit”取消) >") - if choose.lower() == "exit": - choose = choose.lower() - break - choose = int(choose) - except: - print("输入有误,请正确输入编号") - continue - if not 0 <= choose or not choose < len(downloadUrl): - print("输入的值超出范围,请正确输入编号") - continue - break - if choose == "exit": - CleanTerminal() - continue - print("开始下载……") - os.system("rm -rf /tmp/wineappstore") - os.system("mkdir -p /tmp/wineappstore") - os.system(f"aria2c -x 16 -s 16 -d /tmp/wineappstore -o install.exe \"{downloadUrl[choose]}\"") - print("开始安装……") - print(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} /tmp/wineappstore/install.exe") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} /tmp/wineappstore/install.exe") - print("安装结束……") - input("按回车键继续……") - CleanTerminal() diff --git a/deb/opt/apps/deepin-wine-runner/AutoConfig.py b/deb/opt/apps/deepin-wine-runner/AutoConfig.py deleted file mode 100755 index 364f9cd..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoConfig.py +++ /dev/null @@ -1,593 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.4.0 -# 更新时间:2022年10月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import base64 -import json -import traceback -import updatekiller -import urllib.request -import req as requests -import PyQt5.QtWidgets as QtWidgets -from UI.AutoConfig import * -from Model import * -try: - import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets - webeng = True -except: - print("未安装此依赖库") - webeng = False - -urlSourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto", # Gitlink 源 - "https://gitee.com/gfdgd-xi/deep-wine-runner-auto-configuration-script/raw/master/", # Gitee 源 - "https://gfdgd-xi.github.io/deep-wine-runner-auto-configuration-script/", # Github 源 - "http://gfdgdxi.msns.cn/wine-runner-list/auto/", # 备用源1,纯 IPv6 源 - "http://gfdgdxi.free.idcfengye.com/deep-wine-runner-auto-configuration-script/", # 备用源2 - "http://gfdgdxi.free.idcfengye.com/wine-runner-list/auto/", # 备用源 3 - "http://127.0.0.1/wine-runner-list/auto/" # 本地测试源 -] -urlSources = urlSourcesList[0] -lists = [] - -class ProgramRunStatusUpload(): - msgWindow = None - starLayout = None - fen = None - starList = [] - sha1Value = "" - programName = None - def ChangeStar(): - if ProgramRunStatusUpload.fen.currentIndex() > 5: - for i in ProgramRunStatusUpload.starList: - i.setText(f"") - return - for i in range(ProgramRunStatusUpload.fen.currentIndex()): - ProgramRunStatusUpload.starList[i].setText(f"") - head = ProgramRunStatusUpload.fen.currentIndex() - end = len(ProgramRunStatusUpload.starList) - for i in range(head, end): - ProgramRunStatusUpload.starList[i].setText(f"") - - def ShowWindow(sha="", title=""): - ProgramRunStatusUpload.starList = [] - ProgramRunStatusUpload.sha1Value = sha - ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - ProgramRunStatusUpload.programName = QtWidgets.QLineEdit() - ProgramRunStatusUpload.fen = QtWidgets.QComboBox() - ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout() - upload = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "上传")) - upload.clicked.connect(ProgramRunStatusUpload.Upload) - if title != "": - ProgramRunStatusUpload.programName.setText(title) - ProgramRunStatusUpload.programName.setDisabled(True) - # 生成星星列表 - for i in [1, 1, 1, 1, 0]: - ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"")) - ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1]) - ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) - ProgramRunStatusUpload.programName.setPlaceholderText(QtCore.QCoreApplication.translate("U", "如果这个程序和程序名确实是合法还是检测到敏感词,改为“NULL”即可")) - ProgramRunStatusUpload.fen.addItems(["0分", "1分", "2分", "3分", "4分", "5分"]) - ProgramRunStatusUpload.fen.setCurrentIndex(4) - ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar) - msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "程序名:")), 0, 0) - msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "评分:")), 1, 0) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.programName, 0, 1) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1) - msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1) - msgWidgetLayout.addWidget(upload, 3, 1) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusUpload.msgWindow.setWindowTitle(QtCore.QCoreApplication.translate("U", "上传程序运行情况")) - ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusUpload.msgWindow.show() - - def Upload(): - try: - #if ProgramRunStatusUpload.sha1Value == "": - #ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText()) - QtWidgets.QMessageBox.information(None, QtCore.QCoreApplication.translate("U", "提示"), requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL2Jhc2g=").decode("utf-8"), { - "BashName": ProgramRunStatusUpload.sha1Value, - "Fen": ProgramRunStatusUpload.fen.currentIndex() - }).json()["Error"]) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(None, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "数据上传失败!")) - -class InformationWindow(): - def ShowWindow(): - #webeng = False - # 获取选中项 - try: - choose = ui.searchList.selectionModel().selectedIndexes()[0].data() - except: - QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") - return - fileName = "" - for i in lists: - print(i) - if i[0] == choose: - fileName = i[1] - break - aboutHtml = "" - try: - get = requests.get(f"{urlSources}/information/{fileName}.txt") - if get.status_code / 100 != 2 and get.status_code / 100 != 3: - int("Bad") - about = get.text - aboutHtml = str(about) - if not "<" in about: - # 非 Html 标签 - for i in about.splitlines(): - about += f"

{i}

\n" - #about = f"
{about}
" - about = f"

关于“{choose}”的介绍

\n{about}" - except: - traceback.print_exc() - about = f"

关于“{choose}”的介绍

\n

暂无此程序的介绍

" - try: - import requests as r - fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8"), timeout=1000).json() - tipsInfo = "" - except: - fenlists = [0, 0, 0, 0, 0] - tipsInfo = "暂时无人提交此脚本运行情况,是否立即提交?" - maxHead = fenlists.index(max(fenlists)) - allNumber = 0 - for i in fenlists: - allNumber += i - try: - maxNumber = max(fenlists) / allNumber * 100 - if tipsInfo == "": - tipsInfo = f"有{maxNumber}%的用户选择了这个评分" - except: - pass - end = 5 - starHtml = "" - if maxHead > 5: - for i in range(end): - if webeng: - starHtml += f"\n" - else: - starHtml += f"\n" - else: - for i in range(maxHead): - if webeng: - starHtml += f"\n" - else: - starHtml += f"\n" - head = maxHead - for i in range(head, end): - if webeng: - starHtml += f"" - else: - starHtml += f"" - about += f"\n

评分情况

\n

{starHtml}

\n

{tipsInfo}

" - message = QtWidgets.QDialog() - messageLayout = QtWidgets.QVBoxLayout() - if webeng: - informationText = QtWebEngineWidgets.QWebEngineView() - print(aboutHtml) - if aboutHtml[:7] == "Visit: ": - url = aboutHtml[7:].splitlines()[0] - print(url) - informationText.setUrl(QtCore.QUrl(url.strip())) - else: - #informationText.linkClicked.connect(lambda: print("a")) - try: - with open("/tmp/deepin-wine-runner-information.html", "w") as file: - file.write(about) - informationText.setUrl(QtCore.QUrl("file:///tmp/deepin-wine-runner-information.html")) - except: - traceback.print_exc() - informationText.setHtml(about) - #informationText.urlChanged.connect(lambda: informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io"))) - else: - informationText = QtWidgets.QTextBrowser() - informationText.setHtml(about) - uploadFen = QtWidgets.QPushButton("提交评分") - uploadFen.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose)) - - #informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io")) - messageLayout.addWidget(informationText) - messageLayout.addWidget(uploadFen) - message.setWindowTitle(f"关于“{choose}”的介绍") - message.resize(int(message.frameSize().width() * 1.5), int(message.frameSize().height())) - message.setLayout(messageLayout) - #message.setWindowModality(ApplicationModal); - message.show() - message.exec_() - -def Add(lists: list): - global pinLunLayout - pinLunLayout1 = QtWidgets.QVBoxLayout() - pinLunLayout = QtWidgets.QWidget() - pinLunLayout.setLayout(pinLunLayout1) - for i in range(pinLunLayout1.count()): - pinLunLayout1.removeItem(pinLunLayout1.itemAt(i)) - for i in lists: - widget = QtWidgets.QWidget() - inLayout = QtWidgets.QGridLayout() - inLayout.addWidget(QtWidgets.QLabel("
"), 0, 0, 1, 3) - inLayout.addWidget(QtWidgets.QLabel(f"{i[0]}"), 1, 0) - inLayout.addWidget(QtWidgets.QLabel(f"

第{i[1]}层

"), 1, 2) - inLayout.addWidget(QtWidgets.QLabel(i[2]), 2, 0, 1, 3) - widget.setLayout(inLayout) - pinLunLayout1.addWidget(widget) - #pinLunLayout.addWidget(QtWidgets.QLabel("
")) -# pinLunLayout = widget - -all = 0 -now = 0 -class ProgramRunStatusShow(): - msgWindow = None - pingLunLayout = None - def ShowWindow(): - global lists - global all - global now - global leftButton - global rightButton - # 获取选中项 - try: - choose = ui.searchList.selectionModel().selectedIndexes()[0].data() - except: - QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") - return - fileName = "" - for i in lists: - print(i) - if i[0] == choose: - fileName = i[1] - break - try: - fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).json() - tipsInfo = "" - except: - #traceback.print_exc() - fenlists = [0, 0, 0, 0, 0] - tipsInfo = "暂时无人提交此脚本评分,是否立即提交?" - - maxHead = fenlists.index(max(fenlists)) - allNumber = 0 - for i in fenlists: - allNumber += i - try: - maxNumber = max(fenlists) / allNumber * 100 - if tipsInfo == "": - tipsInfo = f"有{maxNumber}%的用户选择了这个评分" - except: - pass - ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - starLayout = QtWidgets.QHBoxLayout() - uploadButton = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "点此提交评分")) - uploadButton.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose)) - msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0, 2, 1) - msgWidgetLayout.addLayout(starLayout, 0, 1, 2, 1) - msgWidgetLayout.addWidget(QtWidgets.QLabel(tipsInfo), 0, 2) - #msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2) - msgWidgetLayout.addWidget(uploadButton, 1, 2) - end = 5 - if maxHead > 5: - for i in range(end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - else: - for i in range(maxHead): - starLayout.addWidget(QtWidgets.QLabel(f"")) - head = maxHead - for i in range(head, end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - pingLun = QtWidgets.QWidget() - msgWidgetLayout.addWidget(pingLun, 4, 0, 1, 3) - pingLunLayout = QtWidgets.QGridLayout() - pingLunInfo = QtWidgets.QTextEdit() - #pingLunInfo.document().setMaximumBlockCount(5) - uploadButton = QtWidgets.QPushButton("评论") - pingLunLayout.addWidget(pingLunInfo, 0, 0, 1, 3) - pingLunLayout.addWidget(uploadButton, 1, 2) - pingLunInfo.setPlaceholderText("""在此输入评论,须知: -※1、不得含有色情、暴力、侮辱等违法内容以及不得有广告推广等内容 -※2、字数至少 15 字,但不得超过 250 字,评论内容最多 5 行,且评论内容将会进行审核,意味着评论不会实时生效显示 -※3、如果审核不通过将会被屏蔽并拉入黑名单,以及公开发布 IP 地址,评论前请三思!""") - leftButton = QtWidgets.QPushButton("上一页") - rightButton = QtWidgets.QPushButton("下一页") - if maxHead == 0: - #pingLun.setDisabled(True) - pass - else: - # 显示最新的3条评论 - try: - all = int(requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/data.txt").text) - now = all - 3 - print(all) - if all < 3: - start = 0 - rightButton.setDisabled(True) - else: - start = all - 3 - uploadList = [] - for i in range(all - 1, start - 1, -1): - print(f"第 {i + 1} 条评论:") - info = requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip() - print(info) - uploadList.append([f"用户{i + 1}", i + 1, info]) - Add(uploadList) - except: - traceback.print_exc() - try: - ProgramRunStatusShow.pingLunLayout = pingLunLayout - pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3) - except: - leftButton.setDisabled(True) - rightButton.setDisabled(True) - leftButton.clicked.connect(Left) - rightButton.clicked.connect(Right) - pingLunLayout.addWidget(leftButton, 3, 0) - pingLunLayout.addWidget(rightButton, 3, 2) - leftButton.setDisabled(True) - pingLun.setLayout(pingLunLayout) - msgWidget.setLayout(msgWidgetLayout) - uploadButton.clicked.connect(lambda: ProgramRunStatusShow.Upload(pingLunInfo.toPlainText(), fileName)) - ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusShow.msgWindow.setWindowTitle(f"脚本“{choose}”运行情况") - ProgramRunStatusShow.msgWindow.show() - - def Upload(info, name): - print(f"脚本:{name}") - print(f"评论:{info}") - try: - res = requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL1BpbmdMdW4=").decode("utf-8"), {"PinLun": info, "Version": name}).json() - print(res) - if res["ExitCode"]: - QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", res["Error"]) - return - QtWidgets.QMessageBox.information(ProgramRunStatusShow.msgWindow, "提示", res["Error"]) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", "提交失败") - - -def UpdateFen(): - global now - fileName = "" - # 获取选中项 - try: - choose = ui.searchList.selectionModel().selectedIndexes()[0].data() - except: - QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") - return - for i in lists: - print(i) - if i[0] == choose: - fileName = i[1] - break - uploadList = [] - for i in range(now + 2, now - 1, -1): - print(f"第 {i + 1} 条评论:") - info = requests.get(f"https://code.gitlink.org.cn/gfdgd-xi/bashpinlun/raw/branch/master/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip() - print(info) - uploadList.append([f"用户{i + 1}", i + 1, info]) - #ProgramRunStatusShow.pingLunLayout.removeItem(ProgramRunStatusShow.pingLunLayout.itemAt(2)) - ProgramRunStatusShow.pingLunLayout.removeWidget(pinLunLayout) - pinLunLayout.hide() - #pinLunLayout. - Add(uploadList) - #l = QtWidgets.QGridLayout() - #l.removeWidget(pinLunLayout) - ProgramRunStatusShow.pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3) - -def Left(): - global now - global all - - if now + 6 >= all: - now = all - 3 - leftButton.setDisabled(True) - rightButton.setEnabled(True) - else: - now += 3 - leftButton.setEnabled(True) - rightButton.setEnabled(True) - UpdateFen() - print(all) - print(now) - -def Right(): - global now - if now - 3 < 0: - now = 0 - rightButton.setDisabled(True) - leftButton.setEnabled(True) - else: - now -= 3 - leftButton.setEnabled(True) - rightButton.setEnabled(True) - UpdateFen() - -def UploadFen(): - global lists - # 获取选中项 - try: - choose = ui.searchList.selectionModel().selectedIndexes()[0].data() - except: - QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") - return - fileName = "" - for i in lists: - print(i) - if i[0] == choose: - fileName = i[1] - break - ProgramRunStatusUpload.ShowWindow(fileName, choose) - -class Connect: - def SearchBotton_Clicked(): - nmodel = QtGui.QStandardItemModel(window) - if ui.searchThings.text() == "": - # 显示全部内容 - for i in lists: - nmodel.appendRow(QtGui.QStandardItem(i[0])) - ui.searchList.setModel(nmodel) - return - for i in lists: - # 显示筛选的内容 - if ui.searchThings.text().upper() in i[0].upper(): - nmodel.appendRow(QtGui.QStandardItem(i[0])) - ui.searchList.setModel(nmodel) - - def RunBotton_Clicked(): - # 获取选中项 - try: - choose = ui.searchList.selectionModel().selectedIndexes()[0].data() - except: - QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") - return - fileName = "" - for i in lists: - print(i) - if i[0] == choose: - fileName = i[1] - break - # 下载脚本 - things = "" - try: - print(f"{urlSources}/{fileName}") - file = open("/tmp/wine-runner-auto-config.wsh", "w") - things = requests.get(f"{urlSources}/{fileName}").text - file.write(things) - file.close() - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件") - return - # 判断版本以启动对应的解释器 - # 做到新旧兼容 - if "($" in things: - print("a") - OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system") - # 执行脚本 - print(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'") - OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'") - #process = QtCore.QProcess() - #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"]) - #process.waitForFinished() - - def OpenFile_Triggered(): - path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)") - if path[0] == "": - return - try: - things = "" - with open(path) as file: - things = file.read() - except: - traceback.print_exc() - # 判断版本以启动对应的解释器 - # 做到新旧兼容 - if "($" in things: - OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '{path[0]}' --system") - # 执行脚本 - OpenTerminal(f"env WINEARCH='{os.getenv('WINEARCH')}' WINEDEBUG='{os.getenv('WINEDEBUG')}' WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '{path[0]}'") - #process = QtCore.QProcess() - #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"]) - #process.waitForFinished() - -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -def ChangeSources(): - global urlSources - sources = [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action_2, ui.action_3, ui.action] - for i in range(0, len(sources)): - if sources[i].isChecked(): - urlSources = urlSourcesList[i] - # 解析云列表 - try: - # 获取列表 - lists = json.loads(requests.get(f"{urlSources}/list.json").text) - # 解释列表并显示在 GUI 上 - nmodel = QtGui.QStandardItemModel(window) - for i in lists: - nmodel.appendRow(QtGui.QStandardItem(i[0])) - ui.searchList.setModel(nmodel) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器") - break - -if __name__ == "__main__": - homePath = os.path.expanduser('~') - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - information = json.loads(readtxt(f"{programPath}/information.json")) - version = information["Version"] - wine = "deepin-wine6-stable" - wineprefix = f"{homePath}/.wine" - try: - wine = sys.argv[1] - wineprefix = sys.argv[2] - except: - pass - app = QtWidgets.QApplication(sys.argv) - window = QtWidgets.QMainWindow() - ui = Ui_MainWindow() - pinLunLayout = QtWidgets.QHBoxLayout() - ui.setupUi(window) - window.setWindowTitle(f"Wine 运行器 {version}——容器自动配置部署脚本") - window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) - iconPath = "{}/deepin-wine-runner.svg".format(programPath) - window.show() - #ui.actionGitlink.setExclusive(True) - sourcesGroup = QtWidgets.QActionGroup(window) - sourcesGroup.addAction(ui.actionGitlink) - sourcesGroup.addAction(ui.actionGitee) - sourcesGroup.addAction(ui.actionGithub) - sourcesGroup.addAction(ui.action_IPv6) - sourcesGroup.addAction(ui.action_2) - sourcesGroup.addAction(ui.action_3) - sourcesGroup.addAction(ui.action) - sourcesGroup.triggered.connect(ChangeSources) - sourcesGroup.setExclusive(True) - #for i in [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action]: - #i.triggered.connect(ChangeSources) - #pass - # 连接信号和槽 - ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked) - #ui.uploadFen.clicked.connect(UploadFen) - ui.getInfoButton.clicked.connect(InformationWindow.ShowWindow) - ui.runBotton.clicked.connect(Connect.RunBotton_Clicked) - ui.openFile.triggered.connect(Connect.OpenFile_Triggered) - ui.exitProgram.triggered.connect(window.close) - ui.getFen.clicked.connect(ProgramRunStatusShow.ShowWindow) - # 解析云列表 - try: - # 获取列表 - lists = json.loads(requests.get(f"{urlSources}/list.json").text) - # 解释列表并显示在 GUI 上 - nmodel = QtGui.QStandardItemModel(window) - for i in lists: - nmodel.appendRow(QtGui.QStandardItem(i[0])) - ui.searchList.setModel(nmodel) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器") - - app.exec_() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/bat b/deb/opt/apps/deepin-wine-runner/AutoShell/command/bat deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/bat +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/changeversion b/deb/opt/apps/deepin-wine-runner/AutoShell/command/changeversion deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/changeversion +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/createbotton b/deb/opt/apps/deepin-wine-runner/AutoShell/command/createbotton deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/createbotton +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/decompressionbottle b/deb/opt/apps/deepin-wine-runner/AutoShell/command/decompressionbottle deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/decompressionbottle +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledWinebottlecreatelink b/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledWinebottlecreatelink deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledWinebottlecreatelink +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledhttpproxy b/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledhttpproxy deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledhttpproxy +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledopengl b/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledopengl deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledopengl +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledwinecrashdialog b/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledwinecrashdialog deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/disbledwinecrashdialog +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/download b/deb/opt/apps/deepin-wine-runner/AutoShell/command/download deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/download +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledWinebottlecreatelink b/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledWinebottlecreatelink deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledWinebottlecreatelink +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledhttpproxy b/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledhttpproxy deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledhttpproxy +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledopengl b/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledopengl deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledopengl +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledwinecrashdialog b/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledwinecrashdialog deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/enabledwinecrashdialog +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/error b/deb/opt/apps/deepin-wine-runner/AutoShell/command/error deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/error +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/info b/deb/opt/apps/deepin-wine-runner/AutoShell/command/info deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/info +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdll b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdll deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdll +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdxvk b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdxvk deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installdxvk +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installfont b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installfont deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installfont +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installgecko b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installgecko deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installgecko +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmono b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmono deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmono +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsi b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsi deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsi +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsxml b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsxml deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installmsxml +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installnet b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installnet deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installnet +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installother b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installother deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installother +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installsparkcorefont b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installsparkcorefont deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installsparkcorefont +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvb b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvb deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvcpp b/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvcpp deleted file mode 100755 index 331d1ca..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/installvcpp +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) - -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/killallwineserver b/deb/opt/apps/deepin-wine-runner/AutoShell/command/killallwineserver deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/killallwineserver +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/pause b/deb/opt/apps/deepin-wine-runner/AutoShell/command/pause deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/pause +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/programforum b/deb/opt/apps/deepin-wine-runner/AutoShell/command/programforum deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/programforum +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/reg b/deb/opt/apps/deepin-wine-runner/AutoShell/command/reg deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/reg +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/stopdll b/deb/opt/apps/deepin-wine-runner/AutoShell/command/stopdll deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/stopdll +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/taskmgr b/deb/opt/apps/deepin-wine-runner/AutoShell/command/taskmgr deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/taskmgr +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/thank b/deb/opt/apps/deepin-wine-runner/AutoShell/command/thank deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/thank +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/version b/deb/opt/apps/deepin-wine-runner/AutoShell/command/version deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/version +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/warning b/deb/opt/apps/deepin-wine-runner/AutoShell/command/warning deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/warning +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/winecfg b/deb/opt/apps/deepin-wine-runner/AutoShell/command/winecfg deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/winecfg +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/command/winver b/deb/opt/apps/deepin-wine-runner/AutoShell/command/winver deleted file mode 100755 index b766ea2..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/command/winver +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../../") -import ConfigLanguareRunner -# 符号转移 -argv = [] -for i in sys.argv[1:]: - argv.append(i.replace(" ", "\\ ")) -com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}") -com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE")) -sys.exit(int(ConfigLanguareRunner.programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/AutoShell/main.py b/deb/opt/apps/deepin-wine-runner/AutoShell/main.py deleted file mode 100755 index a3ed4ba..0000000 --- a/deb/opt/apps/deepin-wine-runner/AutoShell/main.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import time -import json -import platform - -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -information = json.loads(readtxt(f"{programPath}/../information.json")) -version = information["Version"] -thankText = "" -for i in information["Thank"]: - thankText += f"{i}\n" -programEnv = [ - ["WINEPREFIX", f"{os.path.expanduser('~')}/.wine"], - ["WINE", "deepin-wine6-stable"], - ["DANGER", "0"], - ["PROGRAMPATH", programPath], - ["VERSION", version], - ["THANK", thankText.replace("\n", "\\n")], - ["MAKER", "gfdgd xi"], - ["COPYRIGHT", f"©2020~{time.strftime('%Y')} gfdgd xi"], - ["PLATFORM", platform.system()], - ["DEBUG", str(int("--debug" in sys.argv))] -] -'''programEnv = [ - ["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"], - ["($WINE)", "deepin-wine6-stable"], - ["($DANGER)", "0"], - ["($HOME)", os.path.expanduser('~')], - ["($PROGRAMPATH)", programPath], - ["($VERSION)", version], - ["($THANK)", thankText], - ["($MAKER)", "gfdgd xi"], - ["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi"], - ["?", "0"], - ["PLATFORM)", platform.system()], - ["DEBUG)", str(int("--debug" in sys.argv))] -]''' -optionAll = 0 -if "--debug" in sys.argv: - optionAll += 1 -if "--system" in sys.argv: - programEnv.append(["DANGER", "1"]) - optionAll += 1 -if os.getenv("WINE") != None: - programEnv.append(["WINE", os.getenv("WINE")]) -if os.getenv("WINEPREFIX") != None: - programEnv.append(["WINEPREFIX", os.getenv("WINEPREFIX")]) -# 生成可以使用的参数 -commandEnv = "" -for i in programEnv: - commandEnv += f"{i[0]}=\"{i[1]}\" " -commandEnv += f"PATH=\"{programPath}/command:$PATH\" " -if len(sys.argv) - optionAll < 2: - print("Wine 运行器自动配置文件解析器交互环境(基于 Bash)") - print(f"版本:{version}") - print(f"©2020~{time.strftime('%Y')} gfdgd xi") - print("--------------------------------------------------------------") - os.system(f"{commandEnv} bash ") - exit() -command = "" -for i in sys.argv[1:]: - command += f"\"{i}\" " -print("Wine 运行器自动配置文件解析器(基于 Bash)") -print(f"版本:{version}") -print(f"©2020~{time.strftime('%Y')} gfdgd xi") -print("--------------------------------------------------------------") -os.system(f"{commandEnv} bash {command}") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/BeCyIconGrabber.exe b/deb/opt/apps/deepin-wine-runner/BeCyIconGrabber.exe deleted file mode 100755 index cb32bd8..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/BeCyIconGrabber.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/BuildDesktop.py b/deb/opt/apps/deepin-wine-runner/BuildDesktop.py deleted file mode 100755 index 53b7035..0000000 --- a/deb/opt/apps/deepin-wine-runner/BuildDesktop.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -################################################################################################################# -# 作者:gfdgd xi -# 版本:2.5.0 -# 更新时间:2022年11月20日 -# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 -# 基于 Python3 的 PyQt5 构建 -################################################################################################################# -################# -# 引入所需的库 -################# -import os -import sys -import traceback -import updatekiller -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets - -desktopList = [] -desktopUsrList = [] - -def GetDesktopList(path): - for i in os.listdir(path): - if os.path.isdir(f"{path}/{i}"): - GetDesktopList(f"{path}/{i}") - if os.path.isfile(f"{path}/{i}"): - try: - desktop = {} - with open(f"{path}/{i}") as file: - things = file.read() - for k in things.splitlines(): - if not "=" in k: - continue - desktop[k[:k.index("=")].lower()] = k[k.index("=") + 1:] - desktopList.append([desktop["Name".lower()], desktop["Icon".lower()], desktop["Exec".lower()], f"{path}/{i}"]) - except: - traceback.print_exc() - delButton.setEnabled(len(desktopList)) - -class DesktopList(QtCore.QThread): - show = QtCore.pyqtSignal(int) - def __init__(self) -> None: - super().__init__() - - def run(self): - if os.path.exists(f"{homePath}/.local/share/applications"): - GetDesktopList(f"{homePath}/.local/share/applications") - self.show.emit(0) - -def ShowDesktop(temp): - nmodel = QtGui.QStandardItemModel(window) - if not len(desktopList): - item = QtGui.QStandardItem("无") - nmodel.appendRow(item) - y = 0 - for i in desktopList: - #item = QtGui.QStandardItem(QtGui.QIcon(i[1]), i[0]) - #nmodel.appendRow(item) - if os.path.exists(i[1]): - nmodel.setItem(y, 0, QtGui.QStandardItem(QtGui.QIcon(i[1]), i[0])) - else: - nmodel.setItem(y, 0, QtGui.QStandardItem(QtGui.QIcon.fromTheme(i[1]), i[0])) - nmodel.setItem(y, 1, QtGui.QStandardItem(i[2])) - nmodel.setItem(y, 2, QtGui.QStandardItem(i[3])) - y += 1 - nmodel.setHeaderData(0, QtCore.Qt.Horizontal, "程序名") - nmodel.setHeaderData(1, QtCore.Qt.Horizontal, "运行路径") - nmodel.setHeaderData(2, QtCore.Qt.Horizontal, ".desktop 文件所在路径") - nmodel.setColumnCount(3) - desktopListView.setModel(nmodel) - -def GetDesktopThread(): - global desktop - desktop = DesktopList() - desktop.show.connect(ShowDesktop) - desktop.start() - -def DeleteButton(): - index = desktopListView.currentIndex().row() - if index < 0: - QtWidgets.QMessageBox.critical(window, "错误", "未选中任何项") - return - print(index) - print(desktopList[index][3]) - #desktopListView.rowMoved(index) - - #desktopListView.removeRow(index) - try: - os.remove(desktopList[index][3]) - del desktopList[index] - ShowDesktop(0) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - - -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -homePath = os.getenv("HOME") -iconPath = "{}/deepin-wine-runner.svg".format(programPath) -#GetDesktopList(f"{homePath}/.local/share/applications") -#print(desktopList) -app = QtWidgets.QApplication(sys.argv) -window = QtWidgets.QMainWindow() -widget = QtWidgets.QWidget() -layout = QtWidgets.QGridLayout() -delButton = QtWidgets.QPushButton("删除指定图标") -delButton.clicked.connect(DeleteButton) -#desktopListView = QtWidgets.QListView() -desktopListView = QtWidgets.QTableView() -desktopListView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) -desktopListView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)#(QAbstractItemView::SelectRows) -layout.addWidget(desktopListView, 0, 0, 1, 4) -layout.addWidget(delButton, 1, 3, 1, 1) -widget.setLayout(layout) -window.setCentralWidget(widget) -window.setWindowTitle("图标管理") -window.resize(int(window.frameGeometry().width() * 1.5), int(window.frameGeometry().height() * 1.2)) -window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) -window.show() -GetDesktopThread() -app.exec_() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/ChangePassword.sh b/deb/opt/apps/deepin-wine-runner/ChangePassword.sh deleted file mode 100644 index f9ab33c..0000000 --- a/deb/opt/apps/deepin-wine-runner/ChangePassword.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo -e "123456\n123456\n\n\n\n\n\n\n\n\n" | adduser "$1" -echo -e "123456\n123456\n" | passwd root \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/Check.exe b/deb/opt/apps/deepin-wine-runner/CheckDLL/Check.exe deleted file mode 100755 index f4850a6..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/CheckDLL/Check.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/CheckCommand.py b/deb/opt/apps/deepin-wine-runner/CheckDLL/CheckCommand.py deleted file mode 100755 index 7592dde..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/CheckCommand.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -################################################################################################################# -# 作者:gfdgd xi -# 版本:2.5.0 -# 更新时间:2022年11月18日 -# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 -# 基于 Python3 的 PyQt5 构建 -################################################################################################################# -################# -# 引入所需的库 -################# -import os -import sys -import json - -if len(sys.argv) <= 1: - print("参数不足") - sys.exit(1) - -if "--help" in sys.argv: - print("帮助:") - print("[exe path] [option]") - print("--json 以 json 格式输出") - print("-w [wine botton] [wine program path]") - -jsonPrint = "--json" in sys.argv -if jsonPrint: - del sys.argv[sys.argv.index("--json")] -lists = [] -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -checkDll = False -if "-w" in sys.argv: - wineCommand = sys.argv.index("-w") - wineBotton = os.getenv("HOME") - wineProgram = "deepin-wine6-stable" - checkDll = True - try: - wineBotton = sys.argv[wineCommand + 1] - wineProgram = sys.argv[wineCommand + 2] - except: - pass -badChar = [ - "(", "?", "*", "!", ")", "&", "'", "\"" -] -with open(sys.argv[1], "rb") as file: - while True: - things = file.readline() - if things == b"": - break - for n in [".dll", ".DLL"]: - if n.encode() in things: - # 提取 DLL 名称 - for i in str(things[1: -2]).split("\\x"): - charBad = False - for b in badChar: - if b in i: - charBad = True - if n in i and not charBad and i[0] != "/": - name = i[2: ].replace(",{M", "").replace("+", "") - # 文件路径合法性检测 - - try: - dllName = name[:name.index(".dll") + 4] - except: - try: - dllName = name[:name.index(".DLL") + 4] - except: - dllName = name - - if dllName.lower() == ".dll": - continue - if dllName in lists: - continue - if checkDll: - if jsonPrint: - if os.system(f"WINEPREFIX='{wineBotton}' {wineProgram} '{programPath}/Check.exe' '{dllName}' > /dev/null 2>&1"): - lists.append(dllName) - continue - else: - os.system(f"WINEPREFIX='{wineBotton}' {wineProgram} '{programPath}/Check.exe' '{dllName}'") - lists.append(dllName) - elif jsonPrint: - lists.append(dllName) - continue - else: - print(dllName) - lists.append(dllName) -if jsonPrint: - print(json.dumps(lists)) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc100.dll.sh b/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc100.dll.sh deleted file mode 100644 index c5a3866..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc100.dll.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env deepin-wine-runner-auto-install-bash -# 使用 Wine 运行器的语言解析器 -########################################################################################## -# 作者:gfdgd xi -# 更新时间:2022年11月19日 -########################################################################################## -# 用于判断是否为 bash 解释器 -installvcpp 4 -info 提示 修复完成!重新检测即可 \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc42.dll.sh b/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc42.dll.sh deleted file mode 100644 index b75ed14..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/mfc42.dll.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env deepin-wine-runner-auto-install-bash -# 使用 Wine 运行器的语言解析器 -########################################################################################## -# 作者:gfdgd xi -# 更新时间:2022年11月03日 -########################################################################################## -# 用于判断是否为 bash 解释器 -installother 2 -info 提示 修复完成!重新检测即可 diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/msvbvm60.dll.sh b/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/msvbvm60.dll.sh deleted file mode 100644 index 204e632..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/bash/msvbvm60.dll.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env deepin-wine-runner-auto-install-bash -# 使用 Wine 运行器的语言解析器 -########################################################################################## -# 作者:gfdgd xi -# 更新时间:2022年11月19日 -########################################################################################## -# 用于判断是否为 bash 解释器 -installvb 4 -info 提示 修复完成!重新检测即可 \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/lists.json b/deb/opt/apps/deepin-wine-runner/CheckDLL/lists.json deleted file mode 100644 index 58f5260..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/lists.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "check": "", - "aaaamon.dll": "描述: aaaamon.dll是Aaaa监视软件动态链接库文件相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "activeds.dll": "描述: activeds.dll是活动目录服务相关应用程序COM接口。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "actxprxy.dll": "描述: actxprxy.dll是Marshalingx ActiveX控件COM接口相关文件。\n属于: Windows ActiveX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "adsmsext.dll": "描述: adsmsext.dll是LDAP协议支持相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "advert.dll": "描述: advert.dll是一个广告软件相关文件,会在Internet Explorer浏览器上显示广告。\n属于: Aureate \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "amovie.dll": "描述: amovie.ocx是应用在Windows 9x平台的多媒体和视频播放技术相关文件。\n属于: IE \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ash.dll": "描述: ash.dll是Bankash木马相关文件,该木马允许攻击者访问你的计算机,窃取密码和个人数据。\n属于: Bankash Trojan \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ati_d3d.dll": "描述: ati_d3d.dll是ATI显示卡3D效果支持相关文件。\n属于: ATI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "avicap.dll": "描述: avicap.dll是Windows API应用程序接口,用于截取AVI视频和摄像头及其它视频硬件设备的视频。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "avifil32.dll": "描述: avifil32.dll是AVI视频支持相关模块。\n属于: Microsoft AVI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "awfxrn32.dll": "描述: awfxrn32.dll是IFAX文件传输接口相关文件。\n属于: 未知N/A \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "awlft332.dll": "描述: awlft332.dll是本地传真程序接口相关文件。\n属于: Windows 98,95 \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "awlhut32.dll": "描述: awlhut32.dll是ASN.1数据编码和解码相关文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "awutil32.dll": "描述: awutil32.dll是微软Microsoft传真应用程序相关文件。\n属于: Microsoft Fax \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "batmeter.dll": "描述: batmeter.dll是电池状态信息管理相关文件,出现在BatMeterCapabilities、CreateBatMeter、DestroyBatMeter和PowerCapabilities等电池厂家的程序中。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "bib.dll": "描述: bib.dll是Adobe Acrobat界面相关文件。\n属于: Adobe Acrobat \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "browselc.dll": "描述: browselc.dll是Windows Shell壳浏览用户界面相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "btvid_32.dll": "描述: btvid_32.dll是Brooktree视频卡I2C和GPIO应用程序接口相关文件。\n属于: Brooktree \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cabinet.dll": "描述: cabinet.dll是Cab压缩包应用程序接口相关文件。\n属于: Microsoft Cabinet File \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "calwin32.dll": "描述: calwin32.dll是NetWare应用程序相关动态链接库文件。\n属于: NetWare \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cdaengine.dll": "描述: cdaengine.dll是WildTangent广告间谍软件相关文件。\n属于: WildTangent Spyware \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cdosys.dll": "描述: cdosys.dll是应用程序CDO相关文件。\n属于: CDO \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cdudflib.dll": "描述: cdudflib.dll是Direct CD光盘刻录软件相关支持文件。\n属于: DirectCD \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cmc.dll": "描述: cmc.dll是MAPI 1.0(Windows消息应用程序接口)公用消息调用相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d32-fw.dll": "描述: d32-fw.dll是雅虎通相关动态链接库文件文件,用于使雅虎通能够透过防火墙。\n属于: Yahoo Messenger \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d3d8thk.dll": "描述: d3d8.dll是DirectX 8.0的Direct3D显示支持程序,用于支持游戏。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d3dim700.dll": "描述: d3dim700.dll是微软Microsoft Direct3D图形系统相关模块。\n属于: Direct3D \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d3dxof.dll": "描述: d3dxof.dll是Direct3D文件格式相关文件。\n属于: Direct3D \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dao3032.dll": "描述: dao3032.dll是Microsoft Jet DAO数据访问相关动态链接库文件。\n属于: Microsoft Jet \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dciman32.dll": "描述: dciman32.dll是显示控制界面管理相关文件,用于调制显示性能。\n属于: Display Control Interface Manager \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ddrawex.dll": "描述: ddrawex.dll是Direct Draw显示相关模块。\n属于: DirectDraw \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "deskcp16.dll": "描述: deskcp16.dll是Windows 9x操作系统显示配置相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "devenum.dll": "描述: devenum.dll是DirectShow相关模块,用于声音输入、声音输出和MIDI设备。\n属于: DirectShow \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "devmgr.dll": "描述: devmgr.dll是Windows设备管理相关文件。\n属于: Windows Device Manager \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dispex.dll": "描述: dispex.dll是Visual Basic脚本COM接口相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dnsapi.dll": "描述: dnsapi.dll是DNS客户端应用程序接口API相关文件。\n属于: DNS Client \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dplay.dll": "描述: dplay.dll是DirectPlay播放器的支持文件。\n属于: Microsoft DirectPlay DLL \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dplayx.dll": "描述: dplayx.dll是DirectPlay相关支持文件。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "drmclien.dll": "描述: drmclien.dll是播放包相关系统库文件。\n属于: DRM \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dxtmsft.dll": "描述: dxtmsft.dll是DirectX媒体图像转换相关支持文件。\n属于: DirectX \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dxtrans.dll": "描述: dxtrans.dll是DirectX相关转换模块。\n属于: DirectX \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ecomwr.dll": "描述: ecomwr.dll是McAfee杀毒软件相关动态链接库文件。\n属于: McAfee \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "efsadu.dll": "描述: efsadu.dll是文件加密相关支持模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "encsplsh.dll": "描述: encsplsh.dll是微软Microsoft Encarta百科全书相关文件。\n属于: 未知N/A \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "esent.dll": "描述: esent.dll是VBA相关运行时支持文件。\n属于: VBA \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "expsrv.dll": "描述: expsrv.dll是VBA运行时相关服务文件。\n属于: VBA \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "glide.dll": "描述: glide.dll是3DFX (Voodoo)图像显示卡相关文件。\n属于: Glide for Voodoo Banshee \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "googletoolbar1.dll": "描述: googletoolbar1.dll是google.com出品的搜索工具条相关文件。\n属于: Google Searching Facility \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "gpsb2.dll": "描述: gpsB2.dll是VX2间谍软件相关程序。\n属于: VX2 Spyware Module \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "hid.dll": "描述: hid.dll是USB的HID相关动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "hotplug.dll": "描述: hotplug.dll是微软Microsoft Windows安全硬件移除相关文件,用于例如PCMCIA设备。\n属于: Microsoft Windows Opearting System \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "hpdcmon.dll": "描述: hpdcmon.dll是惠普HP打印机语言监视支持文件。\n属于: HP Printers \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iccvid.dll": "描述: iccvid.dll是Cinepak视频解码相关文件。\n属于: Cinepak Video \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "icm32.dll": "描述: icm32.dll是显示器色彩调节和计算相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "icqcore.dll": "描述: icqcore.dll是ICQ即时通讯软件图形用户界面相关文件。\n属于: ICQ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "icqmapi.dll": "描述: icqmapi.dll是ICQ即时通讯软件消息相关应用程序接口文件。\n属于: ICQ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "idapi32.dll": "描述: idapi32.dll是Borland数据库系统相关文件。\n属于: Borland Database Engine \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "idq.dll": "描述: idq.dll是ISAPI索引相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iedkcs32.dll": "描述: iedkcs32.dll是微软Microsoft Internet Explorer浏览器用户个性化相关文件。\n属于: Microsoft Internet Explorer \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ifc22.dll": "描述: ifc22.dll是罗技Logitech鼠标增强相关文件。\n属于: iFeel TouchSence Logitech mouse \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iforce2.dll": "描述: iforce2.dll是力反馈游戏手柄相关文件。\n属于: Games \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imeshare.dll": "描述: imeshare.dll是微软Microsoft Office输入法相关文件。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imgcmn.dll": "描述: imgcmn.dll是基本图形相关库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imgscan.dll": "描述: imgscan.ocx是ImagEdit扫描控制相关文件\n属于: Microsoft ImagEdit \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imm32.dll": "描述: imm32.dll是微软Microsoft Windows输入法管理相关文件。\n属于: Microsoft Windows (IMM) \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "inetcomm.dll": "描述: inetcomm.dll是微软即时通讯相关应用程序接口文件。\n属于: Microsoft Internet Messaging API \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "inetcplc.dll": "描述: inetcplc.dll是Internet控制面板相关动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: Yes \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "inetwh32.dll": "描述: inetwh32.dll是Blue Sky软件在线帮助相关文件。\n属于: Blue Sky DLL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ir50_32.dll": "描述: ir50_32.dll是Intel Indeo视频解码相关文件。\n属于: Indeo video \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "itss.dll": "描述: itss.dll是微软Microsoft储存系统相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "jgdw400.dll": "描述: jgdw400.dll是AOL .ART格式文件相关支持文件。\n属于: AOL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "jit.dll": "描述: jit.dll是微软Java运行时相关动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "jpeg1x32.dll": "描述: jpeg1x32.dll是JPEG图像相关库文件。\n属于: Microsoft JPEG \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "kbdus.dll": "描述: kbdus.dll是美式键盘相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "lmf32v.dll": "描述: lmf32v.dll是Vertical Theories的广告程序。该程序监视你的浏览行为,并回传到其服务器进行分析。该进程也会弹出广告。\n属于: Hyperlinker Spyware Module \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "loadpowerprofile.dll": "描述: LoadPowerProfile (powrprof.dll)是微软Microsoft Windows 9x电源管理控制面板相关模块。\n属于: Microsoft Windows Operating System \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "localspl.dll": "描述: localspl.dll是本地打印机相关动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "locwin32.dll": "描述: locwin32.dll是Novell Netware客户端相关文件。\n属于: Novell NetWare Client API \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ls3df.dll": "描述: ls3df.dll是Mafia计算机游戏相关文件。\n属于: Game Mafia \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "lsasrv.dll": "描述: lsasrv.dll用于本地安全密码验证相关动态链接库文件。\n属于: Microsoft Windows Operating System \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ltwrp10n.dll": "描述: ltwrp10n.dll是Win32 LEADTOOLS图像库文件。\n属于: LEADTOOLS \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "lz32.dll": "描述: lz32.dll是LZ解压和压缩相关文件。\n属于: LZ Expand/Compress \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "lzexpand.dll": "描述: lz32.dll是LZ压缩格式解压和压缩相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mapistub.dll": "描述: mapistub.dll是Windows NT的MAPI相关文件。\n属于: MAPI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mapobj90.dll": "描述: mapobj90.dll是MapPoint相关软件。它是一个地图和分析工具。\n属于: MapPoint \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "maxlink3.dll": "描述: maxlink3.dll是Visioneer扫描仪相关库文件。\n属于: 未知N/A \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "maxrast.dll": "描述: maxrast.dll是Visioneer公司相关库文件,用于支持图像。\n属于: PaperPort \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "maxutil.dll": "描述: maxutil.dll是Visioneer扫描仪相关库文件。\n属于: PaperPort \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mdvmqlt.dll": "描述: mdvmqlt.dll是EA公司Battle Field 1942游戏相关文件。\n属于: Game BattleField \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc42loc.dll": "描述: mfc42loc.dll是MFC应用程序本地化资源相关文件。\n属于: MFC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc42u.dll": "描述: mfc42u.dll是微软MFC程序相关动态链接库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfcuia32.dll": "描述: mfcuia32.dll是对象链接与嵌入OLE的ANSI和Unicode对话框支持相关文件。\n属于: OLE \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mmcndmgr.dll": "描述: mmcndmgr.dll是MMC Node管理COM接口相关动态链接库文件。\n属于: MMC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mmefxe.dll": "描述: mmefxe.ocx是微软多媒体控制相关COM接口文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "moricons.dll": "描述: moricons.dll是Windows NT图标资源文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mplvpx.dll": "描述: mplvpx.dll是微软Microsoft Media Player音乐回放相关动态链接库文件。\n属于: Microsoft Media Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mprddm.dll": "描述: mprddm.dll微软Microsoft路由和RAS拨号管理相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msacm.dll": "描述: msacm.dll是微软音频压缩相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscat32.dll": "描述: mscat32.dll是MakeCat.exe相关动态链接库文件。\n属于: MakeCat \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscms.dll": "描述: mscms.dll是微软图像色彩管理系统相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscomctl.dll": "描述: mscomctl.ocx是公用ActiveX插件控制模块。\n属于: Windows ActiveX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msconf.dll": "描述: msconf.dll是NetMeeting网络会议程序相关文件。\n属于: Netmeeting \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msdart32.dll": "描述: msdart32.dll是对象链接与嵌入数据库访问相关模块。\n属于: OLE DB \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msdtcprx.dll": "描述: msdtcprx.dll是微软Microsoft分布式负载平衡相关文件。\n属于: MS DTC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msgr3ge.dll": "描述: msgr3ge.dll是微软Office产品德语字符检查支持相关文件。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msgrru32.dll": "描述: msgrru32.dll是微软Office产品俄语字符检查相关文件。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msgsvc.dll": "描述: msgsvc.dll是NT信使服务管理相关文件,用于发送和接收信使消息。\n属于: Alerter \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mshtmled.dll": "描述: mshtmled.dll是微软HTML编辑相关模块。\n属于: HTML \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msieftp.dll": "描述: msieftp.dll是微软IE浏览器支持FTP访问相关文件。\n属于: Internet Explorer \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msjet40.dll": "描述: msjet40.dll是Microsoft Jet数据库相关文件。\n属于: Microsoft Jet Engine \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msjt3032.dll": "描述: msjt3032.dll是微软Microsoft Jet数据库相关文件。\n属于: Microsoft Jet Engine \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msjter35.dll": "描述: msjter35.dll是微软Microsoft Jet数据库引擎相关文件。\n属于: Microsoft Jet Engine \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msls31.dll": "描述: msls31.dll是Internet Explorer浏览器和字处理程序Unicode字符支持相关文件。\n属于: IE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msnet32.dll": "描述: msnet32.dll是微软Microsoft 32位网络应用程序接口相关文件。\n属于: Microsoft Network \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msoert2.dll": "描述: msoert2.dll是微软Microsoft Outlook Express动态链接库文件。\n属于: Outlook Express \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msorcl32.dll": "描述: msorcl32.dll是Oracle 微软ODBC数据库相关文件。\n属于: ODBC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mspdb60.dll": "描述: mspdb60.dll是Microsoft Visual Studio编程数据库支持相关文件。.\n属于: Visual Studio \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msrating.dll": "描述: msrating.dll是微软Microsoft网络安全等级和本地用户管理相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msrclr40.dll": "描述: msrclr40.dll是DAO 3.6数据库相关文件。\n属于: Microsoft Jet \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msrdo20.dll": "描述: msrdo20.dll是ODBC数据库支持相关文件。\n属于: ODBC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mssp3ge.dll": "描述: mssp3ge.dll是Lingsoft CSAPI字符检查相关文件。\n属于: Lingsoft \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msspel2.dll": "描述: msspel2.dll是Word 6.0字符校对检查相关文件。\n属于: Word \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mswsock.dll": "描述: mswsock.dll是Winsock网络服务相关文件。\n属于: Windows Socket \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mydocs.dll": "描述: mydocs.dll是我的文档文件夹用户解码相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "n32userl.dll": "描述: n32userl.dll是Norton AntiVirus反病毒软件相关模块。\n属于: Norton Antivirus \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netapi.dll": "描述: netapi.dll是Windows网络应用程序接口相关文件,用于访问微软网络。\n属于: Microsoft network \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netdtect.dll": "描述: netdtect.dll是网卡自动检测相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netevent.dll": "描述: netevent.dll是网络错误消息相关提醒模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netman.dll": "描述: netman.dll是网络连接管理相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netrap.dll": "描述: netrap.dll是网络远程管理协议相关模块。.\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netshell.dll": "描述: netshell.dll是网络连接管理Shell壳程序。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netwin32.dll": "描述: netwin32.dll是Novell NetWare网络库文件。\n属于: Novell NetWare Net Library \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "newdotnet.dll": "描述: newdotnet.dll是New.net应用程序相关动态链接库文件。\n属于: New.net \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ntdsapi.dll": "描述: ntdsapi.dll是分布式计算机处理环境的目录服务COM接口模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nvqtwk.dll": "描述: NvQTwk.dll是Nvidia显示卡相关库文件。\n属于: Nvidia Graphics Library Module \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nwcalls.dll": "描述: nwcalls.dll是Novell NetWare应用程序接口相关文件,用于NCP连接文件服务器和客户端计算机。\n属于: NetWare API \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "odbcbcp.dll": "描述: odbcint.dll是ODBC数据库查询相关模块。\n属于: ODBC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "odbcint.dll": "描述: odbcint.dll是ODBC数据库查询相关模块。\n属于: Microsoft ODBC Resource DLL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "odbcjt32.dll": "描述: odbcint.dll是微软ODBC数据库查询相关模块。\n属于: Microsoft ODBC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ole2.dll": "描述: ole2.dll是对象链接与嵌入相关模块。\n属于: Microsoft OLE 2.3.2 16/32 Interoperability Library \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "oledlg.dll": "描述: ole2.dll是对象链接与嵌入OLE相关模块,用于公共对话框。\n属于: Microsoft OLE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "p2bbnd.dll": "描述: p2bbnd.dll是Crystal数据报告相关模块。\n属于: Crystal Report \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "p2sodbc.dll": "描述: p2sodbc.dll是ODBC数据Crystal报告相关模块。\n属于: Crystal Report \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "passfilt.dll": "描述: passfilt.dll是密码策略和保护相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pdh.dll": "描述: pdh.dll是登陆和硬件统计相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pdm.dll": "描述: pdm.dll是进程脚本调试管理相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "perfctrs.dll": "描述: perfctrs.dll是Windows登陆和硬件统计相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "perfproc.dll": "描述: perfproc.dll是登陆和硬件统计相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pifmgr.dll": "描述: pifmgr.dll是windows图标资源管理相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pnen3260.dll": "描述: pnen3260.dll是RealMedia Player播放器相关模块。\n属于: RealMedia \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pngu3263.dll": "描述: pngu3263.dll是Realnetworks RealPlayer播放器图形用户界面相关模块。\n属于: RealPlayer \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pngu3266.dll": "描述: pngu3266.dll是RealMedia Player播放器相关模块。\n属于: RealMedia \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pperr.dll": "描述: pperr.dll是Visioneer 5300 USB接口扫描器设备相关模块。\n属于: PaperPort \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "printui.dll": "描述: printui.dll是命令行方式安装打印机相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "prismxl.dll": "描述: prismxl.exe是Lanovation PrismXL相关服务,用于进行远程控制。\n属于: Lanovation PrismXL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pstprx32.dll": "描述: pstprx32.dll是微软Microsoft Outlook代理储存管理相关文件。\n属于: Microsoft Outlook \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ra32.dll": "描述: ra32.dll是RealAudio音频支持相关文件。\n属于: RealAudio \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ragui32.dll": "描述: ragui32.dll是RealAudio音频高级支持文件。\n属于: RealAudio \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rasapi16.dll": "描述: rasapi16.dll是16位网络拨号应用程序接口相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rasman.dll": "描述: rasman.dll是远程控制相关软件模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rasscrpt.dll": "描述: rasscrpt.dll是网络拨号脚本相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "regsvr32.dll": "描述: regsvr32.dll是DLL添加辅助相关文件,用于注册和反注册DLL文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rmoc3260.dll": "描述: rmoc3260.dll是RealPlayer和Windows Media Player媒体回放相关COM接口文件。\n属于: Real Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rnaui.dll": "描述: rnaui.dll是网络拨号设置库文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rnr20.dll": "描述: rnr20.dll是微软Microsoft Windows Sockets 2.0的TCP/IP协议相关服务。\n属于: Windows Socket \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rpcss.dll": "描述: rpcss.dll是分布式COM服务相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rpmn3260.dll": "描述: rpmn3260.dll是RealNetworks公司RealPlayer产品动态链接库文件。\n属于: Real Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rsabase.dll": "描述: rsabase.dll是Windows 2000加密服务相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rsaenh.dll": "描述: rsaenh.dll是微软Microsoft增强加密服务相关文件,用于128位加密。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rtutils.dll": "描述: rtutils.dll是一个追踪API接口,用于输出诊断信息到微软Microsoft Windows NT/Windows 2000路由和远程控制服务。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rupdate.dll": "描述: rupdate.dll是McAfee产品相关文件,用于自动升级。\n属于: McAfee Products \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "samlib.dll": "描述: samlib.dll是安全认证管理应用程序接口API相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sendmail.dll": "描述: sendmail.dll是用于通过网站发送邮件的库文件。\n属于: Microsoft Windows IIS \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sens.dll": "描述: sens.dll是系统事件提醒服务相关库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sensapi.dll": "描述: sensapi.dll是系统事件提醒服务相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "setupwbv.dll": "描述: setupwbv.dll用于检查并修复Internet Explorer配置。\n属于: Microsoft Internet Explorer \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sfc.dll": "描述: sfc.dll用于校验和监视系统文件变更。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sfcfiles.dll": "描述: sfcfiles.dll是系统文件监视和验证相关程序。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sh31w32.dll": "描述: sh31w32.dll用于内存利用情况。\n属于: SmartHeap \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shell.dll": "描述: shell.dll是Windows Shell壳应用程序接口相关库文件,用于打开网页和文件。\n属于: Microsoft Windows Shell \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shimgvw.dll": "描述: shimgvw.dll用于图像显示的COM接口程序。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "softpub.dll": "描述: softpub.dll是用于支持加密的动态链接库文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "speer.dll": "描述: Speer.dll是Solid Peer间谍软件相关文件。\n属于: Solid Peer spyware \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "spin32.dll": "描述: spin32.ocx是Visual Basic语言的ActiveX控件。\n属于: Microsoft Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "spmsg.dll": "描述: spmsg.dll是用于显示service packs补丁包消息的文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sqlsrv32.dll": "描述: sqlsrv32.dll是用于微软SQL服务ODBC驱动相关文件。\n属于: Microsoft SQL Server ODBC Driver \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ss32x25.dll": "描述: ss32x25.ocx是FarPoint技术相关文件,用于显示控制。\n属于: FarPoint \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "stclient.dll": "描述: stclient.dll是COM+配置安全客户端相关文件。\n属于: Microsoft COM+ \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "stobject.dll": "描述: stobject.dll是资源文件,用于图标等。\n属于: Microsoft Systray \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "storprop.dll": "描述: storprop.dll是用于更改DVD读取区域相关动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "streamci.dll": "描述: streamci.dll是安装流媒体硬件设备相关文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "sysmon.dll": "描述: sysmon.ocx是系统性能监视的ActiveX控件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "system86.dll": "描述: system86.dll是内存分配库文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tapi.dll": "描述: tapi.dll是微软Windows电话服务相关模块。\n属于: Windows Telephony \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tdc.dll": "描述: tdc.ocx是Visual Basic应用程序相关表列数据ActiveX控件模块。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "thumbvw.dll": "描述: thumbvw.dll是文档缩略图察看相关动态链接库文件,用于在资源管理器中察看文档、JPEG文件等。\n属于: Thumbnail View \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tl32v20.dll": "描述: tl32v20.dll是DiskKeeper软件保护锁相关文件。\n属于: DiskKeeper \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "toolhelp.dll": "描述: toolhelp.dll是Windows默认数组应用程序接口相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "traffic.dll": "描述: traffic.dll是微软飞行模拟软件第三方模块。\n属于: Flight Simulator \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tsd32.dll": "描述: tsd32.dll是音频编码和解码相关文件。\n属于: TrueSpeech \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "txfaux.dll": "描述: txfaux.dll是微软Microsoft分布式处理相关文件。\n属于: MSDTC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "unrar.dll": "描述: unrar.dll是RAR压缩包解压相关文件。\n属于: UnRAR \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "url.dll": "描述: url.dll是Internet快捷壳扩展相关应用程序接口文件。\n属于: IE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "usp10.dll": "描述: usp10.dll是字符显示脚本应用程序接口相关文件。\n属于: Uniscribe \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vb5stkit.dll": "描述: vb5stkit.dll是VB应用程序创建快捷方式应用程序接口相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vba332.dll": "描述: vba322.dll是Microsoft Office自动控制相关模块。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vbajet32.dll": "描述: vbajet32.dll是Visual Basic应用程序开发相关文件。\n属于: VBA \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ver.dll": "描述: ver.dll是Windows版本检测应用程序接口相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "version.dll": "描述: version.dll是Windows NT系统版本检测应用程序接口相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vfpodbc.dll": "描述: vfpodbc.dll是Visual FoxPro应用程序ODBC数据管理应用程序接口相关文件。\n属于: ODBC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vsnetutils.dll": "描述: vsnetutils.dll是ZoneLabs ZoneAlarm防火墙软件相关文件。\n属于: ZoneAlarm \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wab32res.dll": "描述: wab32res.dll是微软地址薄相关文件,用于Outlook和Outlook Express储存Email邮件地址和其它联系信息。\n属于: Outlook \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "webhits.dll": "描述: webhits.dll是网络服务应用程序接口相关模块,用于统计点击率高的HTML页面。\n属于: ISAPI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "win87em.dll": "描述: win87em.dll是Windows应用程序浮点运算相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winnls.dll": "描述: winnls.dll是特殊字符输入扩展相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winplay.dll": "描述: winplay.dll是游戏软件多媒体播放解码回放相关文件。\n属于: Game \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winscard.dll": "描述: winscard.dll是个人计算机对智能卡读取相关程序。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wkssvc.dll": "描述: wkssvc.dll是本地系统进行远程文件打印相关服务文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wldap32.dll": "描述: wldap32.dll是LDAP应用程序接口相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wlnotify.dll": "描述: wlnotify.dll是对Windows事件提醒相关应用程序接口,例如Windows登陆、关机、注销等。\n属于: Winlogon \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wmicore.dll": "描述: wmicore.dll是WMI服务相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wmmutil.dll": "描述: wmmutil.dll是Windows Movie Maker影像处理程序支持文件。\n属于: Windows Movie Maker \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wow32.dll": "描述: wow32.dll是16位代码调用32位代码应用程序接口。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wshom.dll": "描述: wshom.ocx是Windows本地脚本对象运行时相关文件。\n属于: Windows Script Host \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wsnmp32.dll": "描述: wsnmp32.dll是SNMP管理应用程序接口,用于发送和接收SNMP精灵的请求。\n属于: WinSNMP \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wtsapi32.dll": "描述: wtsapi32.dll是终端服务的应用程序接口,用于包括:(1) 管理终端服务,(2)设置和恢复终端服务用户的配置信息,(3)应用终端服务虚拟频道。\n属于: Windows Terminal Server \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wuv3is.dll": "描述: wuv3is.dll是Windows Update升级相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "xolehlp.dll": "描述: xolehlp.dll是Microsoft分布式平衡负载相关应用程序接口文件。\n属于: MSDTC \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ac1st15.dll": "描述: ac1st15.dll是AutoCAD、AutoCAD LT、KeyPLANTING和KeySCAPE等软件动态链接库,该文件是Autodesk公司出品。\n属于: AutoCAD \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "binkw32.dll": "描述: binkw32.dll是BINK视频解码器相关进程,用于压缩视频回放,例如游戏中的视频。\n属于: Bink Video Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "bwcc.dll": "描述: bwcc.dll是Borland Windows控件相关动态链接库文件。\n属于: Borland C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "bwcc32.dll": "描述: bwcc32.dll是Borland Windows控件相关动态链接库文件。\n属于: Borland C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cards.dll": "描述: cards.dll是Windows纸牌游戏相关文件。\n属于: Game Windows Solitare \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cctrust.dll": "描述: cctrust.dll是Symantec公司ccTrust公用客户端动态链接库文件。\n属于: Symantec Products \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cd_clint.dll": "描述: cd_clint.dll是Cydoor公司动态链接库文件。\n属于: CYDOOR \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cdonts.dll": "描述: cdonts.dll协同数据对象界面相关文件。\n属于: CDO \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cncs232.dll": "描述: cncs232.dll是Europress和IMSI公司多媒体库文件,用于支持它们的游戏。\n属于: Games Multimedia Fusion \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cncs32.dll": "描述: cncs32.dll是create游戏图像相关动态链接库文件。\n属于: Game Factory \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "core.dll": "描述: core.dll是SuperScape 3D Viewer察看器相关动态链接库。\n属于: Viscape Universal \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d3d9.dll": "描述: d3d9.dll是DirectX 9的动态链接库,用于支持Windows多媒体和游戏。\n属于: DirectX \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "disktool.dll": "描述: disktool.dll是DiskTool软件动态链接库文件,它是一款系统管理软件用于监视磁盘状态和避免数据文件储存问题。\n属于: Disktool \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "eax.dll": "描述: eax.dll是EAX环绕音效特性相关库文件。\n属于: EAX \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "egnsengine.dll": "描述: egnsengine.dll是Gator GAIN间谍软件相关文件。\n属于: Gator GAIN \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "fm20.dll": "描述: fm20.dll是微软表单创建相关动态链接库文件。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "gapi32.dll": "描述: gapi32.dll是微软邮件协议相关文件。\n属于: Microsoft Exchange \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "glide2x.dll": "描述: glide2x.dll是3DFX (Voodoo)显示卡Glide 3D驱动程序相关文件。\n属于: Glide for Voodoo Banshee \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "glide3x.dll": "描述: glide3x.dll是3DFX (Voodoo)显示卡Glide 3D驱动程序相关文件。\n属于: Glide for Voodoo Banshee \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "glu32.dll": "描述: glide2x.dll是OpenGL图像相关动态链接库文件。\n属于: Microsoft OpenGL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "hhctrl.dll": "描述: hhctrl.ocx是Microsoft帮助文档界面相关文件。\n属于: Microsoft HTML Help Control \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "idle.dll": "描述: idle.dll是Microsoft Visual C++无功分量部分相关文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iepeers.dll": "描述: iepeers.dll是微软Microsoft Internet Explorer浏览器库文件。\n属于: Microsoft Internet Explorer \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ijl15.dll": "描述: ijl15.dll是IntelJPG图像压缩相关库文件。\n属于: Intel JPEG Library \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imgedit.dll": "描述: imgedit.ocx是微软图像处理相关文件。\n属于: Microsoft ImagEdit \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "jscript.dll": "描述: jscript.dll是Microsoft JavaScript脚本支持相关文件。\n属于: Microsoft JScript \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "libeay32.dll": "描述: libeay32.dll是OpenSSL加密特性相关文件,用于通过网络加密传输。\n属于: OpenSSL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "maxcodec.dll": "描述: maxcodec.dll是ScanSoft PaperPort软件图像压缩和解压相关模块。\n属于: PaperPort \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "maxkernl.dll": "描述: maxkernl.dll是ScanSoft PaperPort Visioneer扫描仪相关库文件。\n属于: PaperPort \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc30.dll": "描述: mfc30.dll是微软Microsoft MFC程序库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc40.dll": "描述: mfc40.dll是微软Microsoft MFC程序库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc42.dll": "描述: mfc42.dll是微软Microsoft MFC程序库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc42d.dll": "描述: mfc42d.dll是MFCDLL共享库文件,用于支持调试版本的MFC程序。\n属于: MFC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfc70.dll": "描述: mfc70.dll是微软Microsoft MFC程序相关库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfcans32.dll": "描述: mfcans32.dll用于对对象链接和嵌入OLE的Unicode和MBCS字符支持。\n属于: OLE \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mfco42d.dll": "描述: mfco42d.dll是MFC OLE调试版本动态链接库文件。\n属于: MFC \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mhputilu.dll": "描述: mhputilu.dll是微软Microsoft Picture It图像软件动态链接库文件。\n属于: Microsoft Picture It! Publishing 2001 \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mlang.dll": "描述: mlang.dll是多语言支持动态链接库文件。用于转换网络字符集为Unicode。\n属于: IE \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mplapx.dll": "描述: mplapx.dll是微软Microsoft Media Player音乐回放相关模块。\n属于: Microsoft Media Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mrtrate.dll": "描述: mrtrate.dll是Intuit Quicken动态链接库文件。\n属于: Rate Sensing Manager \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscomm32.dll": "描述: mscomm32.ocx是ActiveX公用控制模块,用于例如Visual Basic 6.0程序的MSComm控制。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msdxm.dll": "描述: msdxm.ocx是Windows Media Player播放器ActiveX控制相关文件。\n属于: Windows Media Player \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mshtml.dll": "描述: mshtml.dll是HTML解释器相关模块。\n属于: HTML \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msjet35.dll": "描述: msjet35.dll是微软Microsoft Jet数据引擎主要文件。该文件用于向Microsoft Access数据库读写数据。\n属于: Microsoft Jet Engine \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mso9.dll": "描述: mso9.dll是微软Microsoft Office 2000办公软件套装的一部分。\n属于: Office 2000 \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mso97.dll": "描述: mso97.dll是微软Microsoft Office 2000软件套装的一部分。\n属于: Office 2000 \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msoe.dll": "描述: msoe.dll是Outlook Express邮件程序相关模块。\n属于: Outlook Express \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mss32.dll": "描述: mss32.dll是Miles声音播放系统库文件,用于WinAMP等多媒体程序音乐回放和声音特效。\n属于: WinAmp \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msscript.dll": "描述: msscript.ocx是Visual Basic 6.0应用程序脚本控制的一部分,用于运行时库。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mssp232.dll": "描述: mssp232.dll是微软Microsoft Office软件字符检查相关文件。\n属于: Microsoft Office \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msspell3.dll": "描述: msspell3.dll是文档字符检查相关模块。\n属于: Word \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msstdfmt.dll": "描述: msstdfmt.dll是微软标准数据格式对象相关动态链接库文件。\n属于: Visual Studio \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvbvm50.dll": "描述: msvbvm50.dll是微软Microsoft Visual Basic虚拟机相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvbvm60.dll": "描述: msvbvm60.dll是微软Microsoft Visual Basic虚拟机相关模块。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcirt.dll": "描述: msvcirt.dll是微软C语言程序运行库相关文件,用于例如打印。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcirtd.dll": "描述: msvcirtd.dll是用户选择进行调试版本编译时所使用的运行库文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcp50.dll": "描述: msvcp50.dll是标准的C运行库相关程序。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcp60.dll": "描述: msvcp60.dll是标准的C运行库程序。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcp70.dll": "描述: msvcp70.dll是.Net的C运行库相关文件。\n属于: Microsoft .NET \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcr70.dll": "描述: msvcr70.dll是微软C运行库相关程序。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcrt.dll": "描述: msvcrt.dll是标准的微软C运行库文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcrt10.dll": "描述: msvcrt10.dll是微软标准C运行库相关文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcrt20.dll": "描述: msvcrt20.dll是微软标准C运行库相关文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcrt40.dll": "描述: msvcrt40.dll是微软标准C运行库相关文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvcrtd.dll": "描述: msvcrtd.dll是微软编译程序调试版本相关文件。\n属于: Visual C++ \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msvfw32.dll": "描述: msvfw32.dll是微软BMP位图压缩和解压缩相关文件,用于Microsoft Video视频。\n属于: Microsoft Video \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mswinsck.dll": "描述: mswinsck.ocx是Visual Basic语言的socket编程相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msxml.dll": "描述: msxml.dll是Internet Explorer 4.0或更高版本的浏览器相关文件,用于解释XML文档。\n属于: XML \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "npdocbox.dll": "描述: NPDocBox.dll是Adobe Acrobat插件相关文件,为Netware和Internet Explorer浏览器安装。\n属于: Adobe Acrobat \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nvcpl.dll": "描述: nvcpl.dll是NVIDIA显示卡相关动态链接库文件。\n属于: NVIDIA drivers \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nvcpldaemon.dll": "描述: NvCplDaemon (NvQTwk.dll)是Nvdia显示卡相关文件。\n属于: NVidia Graphics Library Module \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nvmctray.dll": "描述: nvmctray.dll是NVidia显示卡相关文件。\n属于: NVidia Multimedia \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nvmediacenter.dll": "描述: nvmctray.dll是NVidia显示卡相关文件。\n属于: NVidia Multimedia \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "nwnp32.dll": "描述: nwnp32.dll是Novell NetWare网络支持相关链接库文件。\n属于: Novell Network \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "odbc32.dll": "描述: odbc32.dll是ODBC数据库查询相关文件。\n属于: ODBC DLL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "oleacc.dll": "描述: oleacc.dll是微软Microsoft Active Accessibility相关动态链接库文件。\n属于: Microsoft Active Accessibility \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "oleaut32.dll": "描述: oleaut32.dll是对象链接与嵌入OLE相关文件。\n属于: Microsoft OLE DLL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "omi9.dll": "描述: omi9.dll是邮件程序MAPI特性相关文件,用于例如Outlook。\n属于: Microsoft MAPI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "opengl32.dll": "描述: opengl32.dll是微软OpenGL特性相关动态链接库文件。\n属于: Microsoft OpenGL \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "oscore.dll": "描述: oscore.dll是AOL即时通讯软件相关文件。\n属于: AOL Messenger \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "p5dll.dll": "描述: p5dll.dll是P5Device相关动态链接库文件。\n属于: P5Device \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pcdlib32.dll": "描述: pcdlib32.dll是柯达Kodak产品相关文件,用于设备数据传输。\n属于: Kodak Photo \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pcre.dll": "描述: pcre.dll是Perl语言相关库文件。\n属于: Perl \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pgsdk.dll": "描述: pgsdk.dll是微软图形SDK开发包相关动态链接库文件。\n属于: Microsoft Presentation Graphics SDK \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pncrt.dll": "描述: pncrt.dll是C语言开发界面相关运行时文件。\n属于: Windows \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pstprx.dll": "描述: pstprx.dll是Windows CE Outlook数据同步相关文件。\n属于: Outlook \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "quartz.dll": "描述: quartz.dll是DirectShow相关库文件,是DirectX的一部分。\n属于: Microsoft DirectX \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "riched20.dll": "描述: riched20.dll是字符编辑器相关文件。\n属于: RichEdit \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "riched32.dll": "描述: riched32.dll是字符编辑器相关文件。\n属于: RichEdit \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "richtx32.dll": "描述: richtx32.ocx是微软Microsoft字符编辑器控制相关程序,用于字符对话框对象高级编辑。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "schannel.dll": "描述: schannel.dll是Internet Explorer 3.x或者4.x浏览器128位加密相关文件。\n属于: Microsoft Internet Explorer \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "setup.dll": "描述: setup.dll是流行的安装程序相关支持文件。\n属于: TextBridge Pro 96 \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "setupapi.dll": "描述: setupapi.dll是流行的安装程序支持相关文件。\n属于: Microsoft Windows Setup \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "smackw32.dll": "描述: smackw32.dll是Smacker视频解码器相关文件。\n属于: Games Media Smacker \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "storm.dll": "描述: storm.dll是暴雪游戏相关动态链接库文件,出现在StarCraft和Diablo等游戏中。\n属于: Games Blizzard \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "symstore.dll": "描述: symstore.dll是Symantec公司设置相关动态链接库文件。\n属于: Symantec \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tabctl32.dll": "描述: tabctl32.ocx是一个ActiveX控制模块,用于SSTab控制和Tabbed对话框控制。\n属于: OLE \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "threed32.dll": "描述: threed32.ocx是Sheridon 3D控制对象相关文件,用于渲染3D图像。\n属于: Sheridon \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "topsearch.dll": "描述: topsearch.dll是Kazaa.exe的间谍软件相关文件。\n属于: Kazaa \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tsbyuv.dll": "描述: tsbyuv.dll是东芝Toshiba视频播放解码器相关程序。\n属于: Toshiba Video \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "twain.dll": "描述: twain.dll是静态图像应用程序接口相关文件。\n属于: Twain Source Manager \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vb40016.dll": "描述: vb40016.dll是Visual Basic运行时相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vb40032.dll": "描述: vb40032.dll是Visual Basic运行时相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vb6fr.dll": "描述: vb6fr.dll是Visual Basic语言运行时相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vb6stkit.dll": "描述: vb6stkit.dll是Visual Basic应用程序接口API相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vbrun100.dll": "描述: vbrun100.dll是Visual Basic语言运行时相关程序。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vbrun200.dll": "描述: vbrun200.dll是Visual Basic语言运行时相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vbrun300.dll": "描述: vbrun300.dll是Visual Basic语言运行时相关文件。\n属于: Visual Basic \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vbscript.dll": "描述: vbscript.dll是VBScript脚本相关支持文件。\n属于: VBScript \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vsutil.dll": "描述: vsutil.dll是ZoneLabs ZoneAlarm软件相关文件。\n属于: ZoneAlarm \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wab.dll": "描述: wab.dll是微软Microsoft地址薄相关文件,用于储存Outlook和Outlook Express的Email地址和其它信息。\n属于: Outlook \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wab32.dll": "描述: wab32.dll是微软Microsoft地址薄相关文件,用于储存Outlook和Outlook Express的Email邮件地址和其它联系信息。\n属于: Outlook \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "weputil.dll": "描述: weputil.dll是Windows娱乐包的相关文件。\n属于: Windows Entertainment Pack \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winaspi.dll": "描述: winaspi.dll是ASPI驱动相关文件,用于控制CD-ROM驱动器、CD/DVD刻录机,支持相关CD刻录备份软件,\n属于: ASPI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winaspi32.dll": "描述: winaspi32.dll是ASPI驱动相关文件,用于控制CD-ROM驱动器、CD/DVD刻录机,支持相关CD刻录备份软件,\n属于: ASPI \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "window.dll": "描述: window.dll是Unreal游戏程序相关文件,用于显示或者配置DirectX设置对话框。\n属于: Games Unreal \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wing.dll": "描述: wing.dll是Windows应用程序图形显示库文件,用以取代DirectX。\n属于: Windows Graphics \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wing32.dll": "描述: wing32.dll是Windows应用程序图形显示库文件,用以取代DirectX。\n属于: Windows Graphics \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wsock32n.dll": "描述: wsock32n.dl是SOCKS网络协议相关文件。\n属于: Windows Winsock \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "xmlparse.dll": "描述: xmlparse.dll是Yahoo!雅虎通即时通讯软件XML解释器文件。\n属于: Yahoo Messenger \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "xmltok.dll": "描述: xmltok.dll是XSLT引擎解码相关文件。\n属于: XSLT \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ygxa_2.dll": "描述: ygxa_2.dll是Yahoo!雅虎通即时通讯软件图形用户界面相关文件。\n属于: Yahoo Messenger \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "yml.dll": "描述: yml.dll是Yahoo!雅虎通应用程序相关库文件。\n属于: Yahoo Messenger \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "zlib.dll": "描述: zlib.dll是ZLIB压缩库相关文件,用于Windows应用程序压缩和解压缩。\n属于: ZLIB \n系统 DLL文件: 否 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "advapi32.dll": "描述: advapi32.dll是一个高级API应用程序接口服务库的一部分,用于支持非常多的API应用程序接口,包括安全和注册的调用。\n属于: Windows NT 4.0 \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "advpack.dll": "描述: advpack.dll用于帮助硬件和软件读取和验证.INF文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "asycfilt.dll": "描述: asycfilt.dll是Microsoft OLE (对象链接和嵌入)特性相关DLL文件。\n属于: OLE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "atl.dll": "描述: atl.dll文件用于支持ATL特性。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "avicap32.dll": "描述: avicap32.dll是Windows API应用程序接口相关模块,用于对摄像头和其它视频硬件进行AVI电影和视频的截取。\n属于: Windows NT 4.0 \n系统 DLL文件: Yes \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "browseui.dll": "描述: browseui.dll用于浏览器UI界面的管理。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "comctl32.dll": "描述: comctl32.dll是Windows应用程序公用GUI图形用户界面模块。\n属于: Windows NT \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "comdlg32.dll": "描述: comdlg32.dll是Windows应用程序公用对话框模块,用于例如打开文件对话框。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "commctrl.dll": "描述: commctrl.dll是Windows应用程序公用GUI图形用户界面模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "cpuinf32.dll": "描述: cpuinf32.dll是CPU信息获取相关模块,用于获取例如CPU速度和CPU ID。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "crtdll.dll": "描述: crtdll.dll是标准C语言库,用于例如打印机,内存等。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "crypt32.dll": "描述: crypt32.dll是Windows加密API应用程序接口模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ctl3d.dll": "描述: ctl3d.dll是Windows应用程序公用GUI图形用户界面3D显示模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ctl3d32.dll": "描述: ctl3d32.dll是Windows应用程序公用GUI图形用户界面3D维显示模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "d3d8.dll": "描述: d3d8.dll是DirectX的3D显示部分控制模块,在DirectX 8.0中被安装。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dbghelp.dll": "描述: dbghelp.dll是symbol引擎及相关模块,用于Windows图形。\n属于: Windows Image \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ddeml.dll": "描述: ddeml.dll是exchange数据交换管理相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ddraw.dll": "描述: ddraw.dll是DirectX的DLL文件,用于绘制多媒体应用程序的2D图形。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "devcon32.dll": "描述: devcon32.dll是设备配置管理动态链接库。用于提供COM库支持SoundFont和EFX特性。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dhcpcsvc.dll": "描述: dhcpcsvc.dll是Windows DHCP客户端服务模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dinput.dll": "描述: dinput.dll是DirectX的DLL文件,用于支持DirectInput输入。该文件用于支持多媒体输入设备,例如游戏手柄\n属于: DirectX DLL \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dinput8.dll": "描述: dinput.dll是DirectX的DLL文件,用于DirectInput输入。该文件用于支持多媒体输入设备,例如游戏手柄。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "dsound.dll": "描述: dsound.dll是DirectX的DLL文件,用于支持Direct Sound声音特性。\n属于: DirectX \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "framedyn.dll": "描述: framedyn.dll是framework链接库文件,\n属于: Windows WMI \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "fxscfgwz.dll": "描述: fxscfgwz.dll是Windows 2000传真配置相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "gdi32.dll": "描述: gdi32.dll是Windows GDI图形用户界面相关程序,用于辅助创建组建。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "gdiplus.dll": "描述: gdiplus.dll是GDI图形设备接口图形界面相关模块。\n属于: Microsoft GDI+ \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "hal.dll": "描述: hal.dll是Windows硬件提取层模块,该用于用于解决硬件的复杂性。\n属于: Microsoft Windows Operating System \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "icmp.dll": "描述: icmp.dll是Windows 2000产品相关模块,用于网络ICMP请求。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iconlib.dll": "描述: iconlib.dll是微软Microsoft图标管理程序。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "imagehlp.dll": "描述: imagehlp.dll是Windows调试辅助动态链接库相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "inetmib1.dll": "描述: inetmib1.dll是Windows NT的简单网络管理协议SNMP相关模块。\n属于: Windows SNMP \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "iphlpapi.dll": "描述: iphlpapi.dll是Windows IP辅助API应用程序接口模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "kernel.dll": "描述: kernel.dll是在旧版本Windows操作系统中重要的一个DLL动态链接库文件。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ksuser.dll": "描述: ksuser.dll is a library which transports latency sensitive, time-stamped data between user perhiperals and system perhiperals\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mapi32.dll": "描述: mapi32.dll是Windows Messaging即时通讯软件API应用程序接口(MAPI)。\n属于: MAPI \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mgmtapi.dll": "描述: mgmtapi.dll是微软Microsoft简单网络管理应用程序接口API模块。\n属于: SNMP \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mmsystem.dll": "描述: mmsystem.dll是多媒体管理模块,用于支持16位多媒体应用程序。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mpr.dll": "描述: mpr.dll是Windws操作系统网络通讯相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mprapi.dll": "描述: mprapi.dll是Windows 2000路由管理模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msacm32.dll": "描述: msacm32.dll是32位应用程序音频压缩模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msafd.dll": "描述: msafd.dll是微软Microsoft Windows操作系统 Sockets 2.0传输服务相关模块。\n属于: Windows Socket \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscomct2.dll": "描述: mscomct2.ocx是ActiveX插件公用管理模块。\n属于: Windows ActiveX \n系统 DLL文件: Yes \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "mscoree.dll": "描述: mscoree.dll是.NET Framework相关组件。\n属于: Microsoft .NET \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msgina.dll": "描述: msgina.dll是WIndows登陆认证策略相关模块。该模块用于完成所有用户登陆和验证功能。\n属于: GINA \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msi.dll": "描述: msi.dll是Windows安装程序MSI(Microsoft Installer)相关模块。\n属于: Windows Installer \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msimg32.dll": "描述: msimg32.dll是Windows图形设备接口GDI相关模块,用于支持新的API应用程序接口和GDI32相关特性。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msjava.dll": "描述: msjava.dll是Java程序COM接口支持相关模块。\n属于: Microsoft JVM \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msnp32.dll": "描述: msnp32.dll是微软网络协议相关动态链接库。\n属于: Microsoft networks \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "msoss.dll": "描述: msoss.dll是Microsoft Trust ASN信任机制相关应用程序接口API模块,用于加密和解密特性。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "netapi32.dll": "描述: netapi32.dll是Windows网络应用程序接口,用于支持访问微软网络。\n属于: Microsoft network \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "newdev.dll": "描述: newdev.dll是添加系统新硬件设备相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ntdll.dll": "描述: ntdll.dll是NT操作系统重要的模块。\n属于: Windows NT \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "oc25.dll": "描述: oc25.dll是对象链接和嵌入OLE运行时模块。\n属于: Microsoft OLE Control runtime DLL \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ole2nls.dll": "描述: ole2.dll是对象链接和嵌入OLE相关模块,用于支持多语言。\n属于: Microsoft OLE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ole32.dll": "描述: ole32.dll是对象链接和嵌入相关模块。\n属于: OLE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "olepro32.dll": "描述: olepro32.dll是对象链接和嵌入OLE特性相关模块。\n属于: Microsoft OLE Property Support DLL \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pidgen.dll": "描述: pidgen.dll是Windows操作系统重要的模块,用于管理产品序列号。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "pjlmon.dll": "描述: pjlmon.dll是PJL打印机监视相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "powrprof.dll": "描述: powrprof.dll是微软Microsoft Windows电源管理配置工具相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "psapi.dll": "描述: psapi.dll是Windows系统进程状态支持模块。\n属于: Process Status Helper \n系统 DLL文件: Yes \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rasapi32.dll": "描述: rasapi32.dll是远程访问应用程序接口(RAS),用于Windows应用程序对调制解调器的控制。\n属于: Remote Access API \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "rpcrt4.dll": "描述: rpcrt4.dll是远程程序调用(RPC)应用程序接口API,用于WIndows应用程序对网络和Internet连接。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "run32.dll": "描述: run32.dll 是应用程序DLL文件运行库相关模块。\n属于: Windows 95 \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "scrrun.dll": "描述: scrrun.dll用于阅读和编写脚本和文本文件。\n属于: Microsoft Script Runtime \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "secur32.dll": "描述: secur32.dll是Windows安全特性相关动态链接库。\n属于: Microsoft Windows DLL \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "setupx.dll": "描述: setupx.dll是WIndows安装程序相关模块。\n属于: Microsoft Windows Setup Functions \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shdoc401.dll": "描述: shdoc401.dll是资源管理器文件夹浏览的COM接口相关模块。\n属于: IE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shdoclc.dll": "描述: shdoclc.dll是为Windows应用程序添加基础文件和网络操作相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shdocvw.dll": "描述: shdocvw.dll是为Windows应用程序添加基础文件和网络操作相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shell32.dll": "描述: shell32.dll是Windows壳Shell相关应用程序接口动态链接库文件,用于打开网页和文件。\n属于: Microsoft Windows Shell \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shfolder.dll": "描述: shfolder.dll是Windows特殊文件夹相关服务模块,例如我的文档。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "shlwapi.dll": "描述: shlwapi.dll是UNC和URL地址动态链接库文件,用于注册键值和色彩设置。\n属于: Microsoft Windows Shell \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "snmpapi.dll": "描述: snmpapi.dll是简单网络管理协议(SNMP)相关模块,用于监视你的LAN局域网网络状态。\n属于: Microsoft SNMP \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "spoolss.dll": "描述: spoolss.dll是打印机打印相关模块。\n属于: Microsoft Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "svrapi.dll": "描述: svrapi.dll用于监视和管理共享网络资源。\n属于: Microsoft network \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "tapi32.dll": "描述: tapi32.dll是Windows排列层相关模块,用于发送消息到Tapisrv.exe。\n属于: Windows Telephony \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "unidrv.dll": "描述: unidrv.dll是通用打印机驱动动态连接库。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "urlmon.dll": "描述: urlmon.dll是微软Microsoft对象链接和嵌入相关模块。\n属于: OLE \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "usbui.dll": "描述: usbui.dll是通用程序界面应用程序接口,用于管理USB用户界面。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "user32.dll": "描述: user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性。\n属于: Windows User API \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "userenv.dll": "描述: userenv.dll是公用应用程序界面应用程序接口,用于管理用户档案。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "vfwwdm32.dll": "描述: vfwwdm32.dll用于Windows应用程序视频进行WDM剪辑驱动相关程序。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "webcheck.dll": "描述: webcheck.dll是用于对网站进行监视的COM接口。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wininet.dll": "描述: wininet.dll是Windows应用程序网络相关模块。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winmm.dll": "描述: winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游戏手柄。\n属于: Windows Multimedia \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winsock.dll": "描述: winsock.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络相关应用程序。\n属于: Windows Sockets \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winsrv.dll": "描述: winsrv.dll是Windows服务,用于支持32位用户和图形设备接口。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "winsta.dll": "描述: winsta.dll是成熟的Windows组件,用于剪切板、全球区域特性和桌面组件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wintrust.dll": "描述: wintrust.dll用于验证第三方应用程序的文件,目录,内存使用,数据签名等。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wmaudsdk.dll": "描述: wmaudsdk.dll用于读取、创建和获取.WMA音频格式文件信息。\n属于: Windows Media \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wmvcore.dll": "描述: wmvcore.dll是Windows媒体视频回放解码相关动态链接库。\n属于: Windows Media \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wnaspi32.dll": "描述: wnaspi32.dll是高级Advanced SCSI程序接口( ASPI )管理相关文件。\n属于: Windows \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ws2_32.dll": "描述: ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。\n属于: Windows Sockets \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "ws2help.dll": "描述: ws2help.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。\n属于: Windows Sockets \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary", - "wsock32.dll": "描述: wsock32.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。\n属于: Windows Sockets \n系统 DLL文件: 是 \n常见错误: File Not Found, Missing File, Exception \n\n资料来源:https://www.2cto.com/shouce/system/dlllibrary" -} \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/CheckDLL/main.py b/deb/opt/apps/deepin-wine-runner/CheckDLL/main.py deleted file mode 100644 index 9d59624..0000000 --- a/deb/opt/apps/deepin-wine-runner/CheckDLL/main.py +++ /dev/null @@ -1,137 +0,0 @@ -import os -import sys -import json -import traceback -import subprocess -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets -# 加入路径 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../") -from Model import * -finding = False -def ReadNeedDll(lists): - nmodel = QtGui.QStandardItemModel(window) - if not len(lists): - item = QtGui.QStandardItem("无") - nmodel.appendRow(item) - for i in lists: - item = QtGui.QStandardItem(i) - nmodel.appendRow(item) - needDllList.setModel(nmodel) - -def ReadBadNeedDll(lists): - global finding - nmodel = QtGui.QStandardItemModel(window) - if not len(lists): - item = QtGui.QStandardItem("无") - nmodel.appendRow(item) - for i in lists: - item = QtGui.QStandardItem(i) - nmodel.appendRow(item) - badDllList.setModel(nmodel) - finding = True - -def ErrorMsg(message): - QtWidgets.QMessageBox.critical(window, "错误", message) - -class ReadDll(QtCore.QThread): - readNeed = QtCore.pyqtSignal(list) - readBad = QtCore.pyqtSignal(list) - error = QtCore.pyqtSignal(str) - def __init__(self) -> None: - super().__init__() - - def run(self): - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - try: - output = subprocess.getoutput(f"python3 '{programPath}/CheckCommand.py' '{sys.argv[1]}' --json") - print(output) - self.readNeed.emit(json.loads(output)) - except: - traceback.print_exc() - self.error.emit(traceback.format_exc()) - try: - badoutput = subprocess.getoutput(f"python3 '{programPath}/CheckCommand.py' '{sys.argv[1]}' --json -w '{sys.argv[2]}' '{sys.argv[3]}'") - print(badoutput) - self.readBad.emit(json.loads(badoutput)) - except: - traceback.print_exc() - self.error.emit(traceback.format_exc()) - -def GetDll(): - global read - read = ReadDll() - read.readNeed.connect(ReadNeedDll) - read.readBad.connect(ReadBadNeedDll) - read.error.connect(ErrorMsg) - read.start() - -def Change(): - if not finding: - return - things = badDllList.selectionModel().selectedIndexes()[0].data().lower() - repairButton.setEnabled(os.path.exists(f"{programPath}/bash/{things}.sh")) - findButton.setEnabled(True) - -def FindDll(): - global dllMap - things = badDllList.selectionModel().selectedIndexes()[0].data().lower() - try: - dllMap["check"] - except: - try: - with open(f"{programPath}/lists.json", "r") as file: - dllMap = json.loads(file.read()) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - return - try: - QtWidgets.QMessageBox.information(window, f"关于“{things}”", dllMap[things]) - except: - QtWidgets.QMessageBox.information(window, f"关于“{things}”", "无此 Dll 的信息") - -def RepairDll(): - things = badDllList.selectionModel().selectedIndexes()[0].data().lower() - OpenTerminal(f"'{programPath}/../AutoShell/main.py' '{programPath}/bash/{things}.sh'") - -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -iconPath = "{}/../deepin-wine-runner.svg".format(programPath) -app = QtWidgets.QApplication(sys.argv) -window = QtWidgets.QMainWindow() -widget = QtWidgets.QWidget() -layout = QtWidgets.QGridLayout() -badDllList = QtWidgets.QListView() -needDllList = QtWidgets.QListView() -badDllList.clicked.connect(Change) -findButton = QtWidgets.QPushButton("查询此 Dll 信息") -repairButton = QtWidgets.QPushButton("修复此 Dll") -findButton.setDisabled(True) -repairButton.setDisabled(True) -findButton.clicked.connect(FindDll) -repairButton.clicked.connect(RepairDll) -badDllList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) -needDllList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) -loadingTips = QtGui.QStandardItemModel(window) -loadingTipsItem = QtGui.QStandardItem("正在读取……") -loadingTips.appendRow(loadingTipsItem) -badDllList.setModel(loadingTips) -needDllList.setModel(loadingTips) -layout.addWidget(QtWidgets.QLabel("程序需要的 Dll(不太准):"), 0, 0, 1, 1) -layout.addWidget(QtWidgets.QLabel("程序缺失的 Dll(不太准):"), 0, 1, 1, 2) -layout.addWidget(needDllList, 1, 0) -layout.addWidget(badDllList, 1, 1, 1, 2) -layout.addWidget(findButton, 2, 1) -layout.addWidget(repairButton, 2, 2) -widget.setLayout(layout) -window.setCentralWidget(widget) -window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) -window.setWindowTitle(f"查看程序“{os.path.basename(sys.argv[1])}”缺少的 DLL") -window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1)) -GetDll() -window.show() -app.exec_() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner-help.json b/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner-help.json deleted file mode 100755 index e7f594c..0000000 --- a/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner-help.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "installdll": "安装指定 dll 在指定容器\n参数数量:1\n参数介绍:dll名称或在从互联网获取DLL工具的编号,如 7012 xolehlp.dll 平台:2003 架构:64 的 7012", - "stopdll": "不允许指定 dll/exe 运行\n参数数量:1\n参数介绍:dll/exe 名称,如 example.exe", - "installfont": "安装指定字体到指定容器\n参数数量:1\n在字体商店的编号,如 5 msyhbd.ttc 的 5", - "installsparkcorefont": "安装星火应用商店的“微软核心字体”\n参数数量:0\n参数介绍:无", - "installmono": "安装最新版本的 mono 到指定容器\n参数数量:0\n参数介绍:无", - "installgecko": "安装最新版本的 gecko 到指定容器\n参数数量:0\n参数介绍:无", - "installvcpp": "安装指定的 VCPP 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Studio C++ 工具的编号,如 10 Visual Studio C++ 2015、2017、2019 和 2022 X64 的 10", - "installnet": "安装指定的 .net framework 运行库到指定容器\n参数数量:1\n参数介绍:在安装 .net framework 工具的编号,如 3 .net framework 4.5.1 Offline Installer 的 3", - "installmsxml": "安装指定的 MSXML 运行库到指定容器\n参数数量:1\n参数介绍:在安装 MSXML 工具的编号,如 1、MSXML 4.0 SP3 的 1", - "echo": "显示内容\n参数数量:≥1\n参数介绍:接要显示的内容", - "info": "显示提示对话框\n参数数量:2\n参数介绍:标题+显示内容", - "error": "显示错误对话框\n参数数量:2\n参数介绍:标题+显示内容", - "warning": "显示警告对话框\n参数数量:2\n参数介绍:标题+显示内容", - "exit": "退出程序\n参数数量:0\n参数介绍:无", - "bat": "执行 cmd 命令在 Wine 容器内(在 Windows 将在系统执行命令)\n参数数量:≥1\n参数介绍:接要执行的命令", - "bash": "执行 bash 命令(在 Windows 系统将执行 cmd 命令)\n参数数量:≥1\n参数介绍:接要执行的命令", - "version": "显示解释器版本(Wine 运行器版本)\n参数数量:0\n参数介绍:无", - "thank": "显示谢明列表\n参数数量:0\n参数介绍:无", - "pause": "按回车键后继续\n参数数量:0\n参数介绍:无", - "download": "使用 aria2 下载文件\n参数数量:≥1 && ≤3\n参数介绍:下载URL+保存在的文件夹+保存的文件名", - "installdxvk": "安装 dxvk 到指定容器\n参数数量:0\n参数介绍:无", - "createbotton": "在指定目录创建容器\n参数数量:0\n参数介绍:无", - "reg": "导入 .reg 文件\n参数数量:0\n参数介绍:reg 文件路径", - "enabledopengl": "开启 OpenGL\n参数数量:0\n参数介绍:无", - "disbledopengl": "关闭 OpenGL\n参数数量:0\n参数介绍:无", - "winecfg": "显示“Wine 设置”\n参数数量:0\n参数介绍:无", - "winver": "显示“关于 Wine”\n参数数量:0\n参数介绍:无", - "changeversion": "更改 Wine 容器系统版本(未实现)\n参数数量:无\n参数介绍:无", - "cat": "显示指定文件(只支持显示编码为UTF-8的文件)\n参数数量:1\n参数介绍:无", - "enabledhttpproxy": "设置指定容器代理\n参数数量:2\n参数介绍:代理服务器地址+端口", - "disbledhttpproxy": "禁用指定容器代理\n参数数量:0\n参数介绍:无", - "enabledwinecrashdialog": "启用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无", - "disbledwinecrashdialog": "禁用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无", - "disbledWinebottlecreatelink": "禁止 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无", - "enabledWinebottlecreatelink": "允许 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无", - "killall": "杀死指定进程\n参数数量:1\n参数介绍:进程名", - "control": "打开控制面板\n参数数量:0\n参数介绍:无", - "taskmgr": "打开任务管理器\n参数数量:0\n参数介绍:无", - "killallwineserver": "杀死所有 Wine 程序\n参数数量:0\n参数介绍:无", - "installvb": "安装指定的 VB 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Basic Runtime 工具的编号,如 4 Visual Basic Runtime Visual Basic 6", - "installother": "安装未归类的运行库到指定容器\n参数数量:1\n参数介绍:在安装其它运行库工具的编号,如 2 MFC运行库", - "decompressionbottle": "解压用 wine 打包的 deb 包内的容器到指定路径\n参数数量:2\n参数介绍:deb 包路径+要解压到的路径", - "programforum": "打开程序论坛\n参数数量:0\n参数介绍:无", - "installmsi": "安装 MSI 文件到指定容器\n参数数量:1\n参数介绍:msi 文件路径" -} \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py b/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py deleted file mode 100755 index 7d2ec11..0000000 --- a/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py +++ /dev/null @@ -1,675 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:3.0.1 -# 更新时间:2022年10月05日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -import os -import sys -import time -import json -import random -import updatekiller -# 阉割 Android 应用安装功能 -#import uengineapi -import platform -import traceback -import webbrowser -import subprocess -import PyQt5.QtWidgets as QtWidgets -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -information = json.loads(readtxt(f"{programPath}/information.json")) -version = information["Version"] -thankText = "" -helpList = json.loads(readtxt(f"{programPath}/ConfigLanguareRunner-help.json")) -for i in information["Thank"]: - thankText += f"{i}\n" -programEnv = [ - ["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"], - ["($WINE)", "deepin-wine6-stable"], - #["($DANGER)", "0"], - ["($DANGER)", "1"], - ["($HOME)", os.path.expanduser('~')], - ["($PROGRAMPATH)", programPath], - ["($VERSION)", version], - ["($THANK)", thankText], - ["($MAKER)", "RacoonGX 团队,By gfdgd xi"], - ["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi"], - ["($?)", "0"], - ["($PLATFORM)", platform.system()], - ["($DEBUG)", "1"] - #["($DEBUG)", str(int("--debug" in sys.argv))] -] -readOnlyEnv = [ - "($DANGER)", - "($HOME)", - "($PROGRAMPATH)", - "($VERSION)", - "($THANK)", - "($MAKER)", - "($COPYRIGHT)", - "($?)", - "($SYSTEM)", - "($DEBUG)" -] - -def FindFile(file, name): - for i in os.listdir(file): - path = f"{file}/{i}" - if os.path.isdir(path): - returnPath = FindFile(path, name) - if returnPath != None: - return returnPath.replace("//", "/") - if os.path.isfile(path): - if i == name: - return path - return None - -def Debug(): - if "--debug" in sys.argv: - traceback.print_exc() - -class Command(): - # 有风险的命令 - dangerCommand = [ - "bash", - "bat", - "download", - "reg" - ] - # 可以被使用的命令 - commandList = [ - "installdll", - "installfont", - "installsparkcorefont", - "installmono", - "installgecko", - "installvcpp", - "installnet", - "installmsxml", - "echo", - "info", - "error", - "warning", - "exit", - "bash", - "bat", - "version", - "thank", - "pause", - "download", - "installdxvk", - "createbotton", - "reg", - "enabledopengl", - "disbledopengl", - "winecfg", - "winver", - "changeversion", - "stopdll", - "cat", - "taskmgr", - "control", - "killall", - "killallwineserver", - "enabledhttpproxy", - "disbledhttpproxy", - "enabledwinecrashdialog", - "disbledwinecrashdialog", - "disbledWinebottlecreatelink", - "enabledWinebottlecreatelink", - "installvb", - "installother", - "decompressionbottle", - "programforum", - "installmsi", - "installapk" - ] - - def __init__(self, commandString: str) -> None: - self.commandString = commandString - - # 解析器 - # 命令字符串转可供解析的列表 - def GetCommandList(self) -> list: - shellList = [] - shellFirstShell = self.commandString.split("\n") - # 转换成可以执行的数组 - for l in range(0, len(shellFirstShell)): - i = shellFirstShell[l] - # 判断有没有注释 - if "#" in i: - # 忽略注释 - i = i[:i.index("#")] - # 删除前后空格 - i = i.strip() - # 如果是空行 - if i == "": - # 忽略此行,此行不做处理 - continue - # 空格转义 - i = i.replace("\\ ", "@Space@") - # 解析 - i = i.split() - # 判断是否为合法的参数,否则提示并忽略 - if not i[0] in self.commandList and i[0][0] != "(": - print(f"行{l + 1}命令{i[0]}不存在,忽略") - programEnv[9][1] = "-2" - continue - if programEnv[2][1] == "0" and i[0] in self.dangerCommand: - print(f"行{l + 1}命令{i[0]}目前解析器不允许运行,忽略") - print("如果需要运行,可以在配置面板开启“允许修改系统”选项(针对GUI用户)") - print("或添加参数 --system(终端调用运行用户)") - programEnv[9][1] = "-1" - continue - rightList = [] - for k in i: - # 处理符号转义 - rightList.append(k.replace("@Space@", " ").replace("\\n", "\n").replace("\\r", "\r")) - shellList.append(rightList) - return shellList - - # 运行器 - class Run(): - close = False - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - def Exit(self): - self.close = True - return 0 - - def InstallDll(self) -> int: - import InstallDll - # 如果是数字 - number = False - try: - int(self.command[1]) - number = True - except: - pass - if number: - return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1])), self.wine) - return InstallDll.Download(self.wineBottonPath, self.command[1], InstallDll.GetUrlByName(self.command[1]), self.wine) - - def InstallDxvk(self): - if not os.path.exists(f"{programPath}/dxvk"): - if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""): - print("错误:无法解压资源") - return 1 - os.remove(f"{programPath}/dxvk.7z") - return os.system(f"env 'WINE={self.wine}' 'WINE64={self.wine}' 'WINEPREFIX={self.wineBottonPath}' bash '{programPath}/dxvk/auto.sh' install") - - def Thank(self) -> int: - for i in information["Thank"]: - print(i) - return 0 - - def InstallFont(self) -> int: - import InstallFont - return InstallFont.Download(self.wineBottonPath, int(self.command[1])) - - def InstallMono(self) -> int: - return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono") - - def InstallGecko(self) -> int: - return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko") - - def InstallVCPP(self) -> int: - import InstallVisualCPlusPlus - return InstallVisualCPlusPlus.Download(self.wineBottonPath, int(self.command[1]), self.wine) - - def InstallNet(self) -> int: - import InstallNetFramework - return InstallNetFramework.Download(self.wineBottonPath, int(self.command[1]), self.wine) - - def InstallMsxml(self) -> int: - import InstallMsxml - return InstallMsxml.Download(self.wineBottonPath, int(self.command[1]), self.wine) - - def Info(self) -> int: - QtWidgets.QMessageBox.information(None, self.command[1], self.command[2]) - return 0 - - def StopDll(self) -> int: - return os.system(f"WINEPREFIX='{self.wineBottonPath}' '{self.wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(self.command[1])[0]} /f") - - def CreateBotton(self): - self.command = ["bat", "exit"] - self.Bat() - return 0 - - def InstallSparkCoreFont(self): - if not os.system("which aptss"): - # 最新版本星火应用商店处理 - os.system("pkexec bash aptss ssupdate") - return os.system("pkexec bash aptss install ms-core-fonts") - if not os.system("which ss-apt-fast"): - # 稍久的版本 - os.system("pkexec ss-apt-fast update") - return os.system("pkexec bash ss-apt-fast install ms-core-fonts") - # 不知道什么版本的处理方法 - if not os.system("which apt-fast"): - # 稍久的版本 - os.system("pkexec apt-fast update") - return os.system("pkexec apt-fast install ms-core-fonts") - os.system("pkexec apt update") - return os.system("pkexec apt install ms-core-fonts") - - def Echo(self) -> int: - del self.command[0] - print(" ".join(self.command)) - return 0 - - def Warning(self): - QtWidgets.QMessageBox.warning(None, self.command[1], self.command[2]) - return 0 - - def Error(self): - QtWidgets.QMessageBox.critical(None, self.command[1], self.command[2]) - return 0 - - def Bash(self): - command = "" - for i in self.command[1:]: - command += f"'{i}' " - return os.system(command) - - def Bat(self) -> int: - # Windows 直接转换为以 cmd 运行 - if platform.system() == "Windows": - # 直接调用 Bash 函数 - return self.Bash() - command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)"] - for i in programEnv: - for k in range(len(command)): - command[k] = command[k].replace(i[0], i[1]) - for i in self.command[1:]: - command.append(i) - commandStr = command[0] + " " - for i in command[1:]: - commandStr += f"'{i}' " - return os.system(commandStr) - - def Version(self): - print(f"版本:{version}") - print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi") - return 0 - - def Pause(self) -> int: - input("按回车键继续……") - return 0 - - def Download(self) -> int: - command = f"aria2c -x 16 -s 16 -c '{self.command[1]}' " - try: - command += f"-d '{self.command[2]}' " - command += f"-o '{self.command[3]}' " - except: - pass - return os.system(command) - - def Reg(self) -> int: - self.command = ["bat", "regedit", "/s", self.command[1]] - return self.Bat() - - def EnabledOpenGl(self) -> int: - self.command = ["reg", f"z:{programPath}/EnabledOpengl.reg"] - return self.Reg() - - def DisbledOpenGl(self) -> int: - self.command = ["reg", f"z:{programPath}/DisabledOpengl.reg"] - return self.Reg() - - def Winver(self): - self.command = ["bat", "winver"] - return self.Bat() - - def Winecfg(self): - self.command = ["bat", "winecfg"] - return self.Bat() - - def ChangeVersion(self): - # 判断是否为正确的版本 - if not os.path.exists(f"{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"): - print("错误:您选择的版本错误,目前只支持以下版本") - for i in os.listdir(f"{programPath}/ChangeWineBottonVersion"): - print(i.replace(".reg", ""), end=" ") - print() - return 1 - self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"] - return self.Reg() - - def Cat(self): - try: - file = open(self.command[1], "r") - print(file.read()) - file.close() - return 0 - except: - print("文件读取错误") - Debug() - return 1 - - def Taskmgr(self): - self.command = ["bat", "taskmgr"] - return self.Bat() - - def Control(self): - self.command = ["bat", "control"] - return self.Bat() - - def Killall(self): - return os.system(f"killall -9 {self.command[1]}") - - def KillallWineServer(self): - command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)", "-k"] - for i in programEnv: - for k in range(len(command)): - command[k] = command[k].replace(i[0], i[1]) - if "box86" in command[1] or "exagear" in command[1] or "box64" in command[1]: - print("不支持此 Wine") - return 1 - if os.path.exists(command[1]): - # 文件存在 - command[1] = f"{os.path.dirname(command[1])}/wineserver" - else: - # 读 which - command[1] = f"{os.path.dirname(subprocess.getoutput(f'which {command[1]}').strip())}/wineserver" - commandStr = command[0] + " " - for i in command[1:]: - commandStr += f"'{i}' " - return os.system(commandStr) - - def EnabledWineBottleCreateLink(self): - self.command = ["bat", "reg", "delete", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"] - return self.Bat() - - def DisbledWineBottleCreateLink(self): - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"] - return self.Bat() - - def DisbledWineCrashDialog(self): - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000000", "/f"] - return self.Bat() - - def EnabledWineCrashDialog(self): - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000001", "/f"] - return self.Bat() - - def EnabledHttpProxy(self): - proxyServerAddress = self.command[1] - port = self.command[2] - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000001", "/f"] - self.Bat() - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyServer", "/d", f"{proxyServerAddress}:{port}", "/f"] - return self.Bat() - - def DecompressionBottle(self): - tempDebDir = f"/tmp/wine-runner-unpack-deb-{random.randint(0, 1000)}" - if os.system(f"dpkg -x '{self.command[1]}' '{tempDebDir}'"): - return 1 - zippath = FindFile(tempDebDir, "files.7z") - if zippath == None: - return 2 - # 解压文件 - os.system(f"mkdir -p '{self.command[2]}'") - fi = os.system(f"7z x -y '{zippath}' -o'{self.command[2]}'") - os.system(f"rm -rfv '{tempDebDir}'") - return fi - - - def DisbledHttpProxy(self): - self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000000", "/f"] - return self.Bat() - - def InstallVB(self): - import InstallVisualBasicRuntime - return InstallVisualBasicRuntime.Download(self.wineBottonPath, int(self.command[1]), self.wine) - - def InstallOther(self): - import InstallOther - return InstallOther.Download(self.wineBottonPath, int(self.command[1]), self.wine) - - def ProgramForum(self): - webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/") - return - - def InstallMSI(self): - self.command = ["bat", "msiexec", "/i", self.command[1]] - return self.Bat() - - def InstallApk(self): - if os.system("which uengine > /dev/null"): - print("未安装 UEngine,无法使用该命令") - return 1 - apk = uengineapi.APK(self.command[1]) - result = apk.install() - homePath = os.getenv("HOME") - if not os.path.exists(f"{homePath}/.local/share/applications/uengine"): - os.makedirs(f"{homePath}/.local/share/applications/uengine") - if not os.path.exists(f"{homePath}/.local/share/icons/hicolor/apps"): - os.makedirs(f"{homePath}/.local/share/icons/hicolor/apps") - package = apk.packageName() - apk.saveApkIcon(f"{homePath}/.local/share/icons/hicolor/apps/{package}.png") - apk.saveDesktopFile(f"{homePath}/.local/share/applications/uengine/{package}.desktop", f"{homePath}/.local/share/icons/hicolor/apps/{package}.png") - return result - - # 可以运行的命令的映射关系 - # 可以被使用的命令的映射 - commandList = { - "installdll": InstallDll, - "installfont": InstallFont, - "installsparkcorefont": InstallSparkCoreFont, - "installmono": InstallMono, - "installgecko": InstallGecko, - "installvcpp": InstallVCPP, - "installnet": InstallNet, - "installmsxml": InstallMsxml, - "echo": Echo, - "info": Info, - "warning": Warning, - "error": Error, - "exit": Exit, - "bash": Bash, - "bat": Bat, - "version": Version, - "thank": Thank, - "pause": Pause, - "download": Download, - "installdxvk": InstallDxvk, - "createbotton": CreateBotton, - "reg": Reg, - "enabledopengl": EnabledOpenGl, - "disbledopengl": DisbledOpenGl, - "winecfg": Winecfg, - "winver": Winver, - "changeversion": ChangeVersion, - "stopdll": StopDll, - "cat": Cat, - "taskmgr": Taskmgr, - "control": Control, - "killallwineserver": KillallWineServer, - "enabledhttpproxy": EnabledHttpProxy, - "disbledhttpproxy": DisbledHttpProxy, - "enabledwinecrashdialog": EnabledWineCrashDialog, - "disbledwinecrashdialog": DisbledWineCrashDialog, - "disbledWinebottlecreatelink": DisbledWineBottleCreateLink, - "enabledWinebottlecreatelink": EnabledWineBottleCreateLink, - "installvb": InstallVB, - "installother": InstallOther, - "decompressionbottle": DecompressionBottle, - "programforum": ProgramForum, - "installmsi": InstallMSI, - "installapk": InstallApk - } - - # 参数数列表 - commandInfo = { - "killall": [1], - "installdll": [1], - "installfont": [1], - "installsparkcorefont": [0], - "installmono": [0], - "installgecko": [0], - "installvcpp": [1], - "installnet": [1], - "installmsxml": [1], - "echo": [1], - "info": [2], - "warning": [2], - "error": [2], - "exit": [0], - "bash": [1], - "bat": [1], - "version": [0], - "thank": [0], - "pause": [0], - "download": [1], - "installdxvk": [0], - "createbotton": [0], - "reg": [1], - "enabledopengl": [0], - "disbledopengl": [0], - "winecfg": [0], - "winver": [0], - "changeversion": [1], - "stopdll": [1], - "cat": [1], - "taskmgr": [0], - "control": [0], - "killallwineserver": [0], - "enabledhttpproxy": [2], - "disbledhttpproxy": [0], - "enabledwinecrashdialog": [0], - "disbledwinecrashdialog": [0], - "disbledWinebottlecreatelink": [0], - "enabledWinebottlecreatelink": [0], - "installvb": [1], - "installother": [1], - "decompressionbottle": [2], - "programforum": [0], - "installmsi": [1], - "installapk": [1] - } - windowsUnrun = [ - "createbotton", - "installdll", - "installmono", - "installgecko", - "winecfg", - "stopdll", - "changeversion", - "enabledopengl", - "disbledopengl", - "installdxvk", - "installfont", - "installsparkcorefont", - "decompressionbottle", - "installapk" - ] - # 解析 - def __init__(self, command: list, wineBottonPath: str, wine: str) -> int: - self.wineBottonPath = wineBottonPath - self.wine = wine - for i in command: - self.command = i - # 变量解析 - if self.command[0][0] == "(" and "=" in self.command[0]: - env = i[0][: i[0].index("=")] - value = i[0][i[0].index("=") + 1:] - # 判断是不是只读变量 - if env in readOnlyEnv: - print(f"运行命令{' '.join(self.command)}出现错误") - print(f"变量 {env} 只读,无法修改,忽略") - continue - change = False - for k in range(len(programEnv)): - # 修改变量 - if env == programEnv[k][0]: - programEnv[k][1] = value - change = True - break - if not change: - # 添加变量 - programEnv.append([f"{env}", value]) - continue - # 解析命令是否可以在 Windows 使用(只限在 Windows 系统时) - if platform.system() == "Windows" and i[0] in self.windowsUnrun: - print("此命令不支持在 Windows 上运行") - programEnv[9][1] = "-5" - continue - # 获取程序帮助信息 - try: - if i[1] == "--help": - print(helpList[i[0]].replace("\\n", "\n")) - continue - except: - pass - # 正常命令解析 - if len(i) -1 < self.commandInfo[i[0]][0]: - print("参数不足") - programEnv[9][1] = "-3" - continue - # 替换环境变量 - for a in range(1, len(i)): - for b in programEnv: - if b[0] in i[a]: - i[a] = i[a].replace(b[0], b[1]) - try: - commandReturn = self.commandList[i[0]](self) - except: - traceback.print_exc() - commandReturn = 1 - if commandReturn: - print(f"运行命令{' '.join(self.command)}出现错误,返回值:", commandReturn) - programEnv[9][1] = str(commandReturn) - if self.close: - break - -app = QtWidgets.QApplication(sys.argv) -if os.getenv("WINE") != None: - programEnv[1][1] = os.getenv("WINE") -if os.getenv("WINEPREFIX") != None: - programEnv[0][1] = os.getenv("WINEPREFIX") -if __name__ == "__main__": - optionAll = 0 - if "--debug" in sys.argv: - optionAll += 1 - if "--system" in sys.argv: - programEnv[2][1] = "1" - optionAll += 1 - if len(sys.argv) - optionAll < 2: - print("Wine 运行器自动配置文件解析器交互环境") - print(f"版本:{version}") - print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi") - print("--------------------------------------------------------------") - while True: - commandLine = input(">") - if commandLine == "exit": - break - com = Command(commandLine) - com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1]) - sys.exit(int(programEnv[9][1])) - # 读取文件 - try: - file = open(sys.argv[1], "r") - com = Command(file.read()) - file.close() - except: - print("错误:无法读取该文件,无法继续") - sys.exit(1) - print("Wine 运行器自动配置文件解析器") - print(f"版本:{version}") - print(f"©2020~{time.strftime('%Y')} gfdgd xi") - print("--------------------------------------------------------------") - com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1]) - sys.exit(int(programEnv[9][1])) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/DisabledOpengl.reg b/deb/opt/apps/deepin-wine-runner/DisabledOpengl.reg deleted file mode 100755 index 868bd2a..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/DisabledOpengl.reg and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Download.py b/deb/opt/apps/deepin-wine-runner/Download.py deleted file mode 100644 index d18d786..0000000 --- a/deb/opt/apps/deepin-wine-runner/Download.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 -import sys -import base64 -import requests -print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9JbnN0YWxsLnBocD9WZXJzaW9uPQ==").decode("utf-8") + sys.argv[1]).text) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/EnabledOpengl.reg b/deb/opt/apps/deepin-wine-runner/EnabledOpengl.reg deleted file mode 100755 index 3a0d396..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/EnabledOpengl.reg and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/GetEXEVersion.exe b/deb/opt/apps/deepin-wine-runner/GetEXEVersion.exe deleted file mode 100755 index 690b06d..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/GetEXEVersion.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/360.svg b/deb/opt/apps/deepin-wine-runner/Icon/360.svg deleted file mode 100755 index 17017a6..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/360.svg +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/BadStar.svg b/deb/opt/apps/deepin-wine-runner/Icon/BadStar.svg deleted file mode 100755 index 7b6cfe4..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/BadStar.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Function/CHROOT.png b/deb/opt/apps/deepin-wine-runner/Icon/Function/CHROOT.png deleted file mode 100755 index 4873b80..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Function/CHROOT.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Function/more-wine.png b/deb/opt/apps/deepin-wine-runner/Icon/Function/more-wine.png deleted file mode 100755 index e4d1a93..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Function/more-wine.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine.png b/deb/opt/apps/deepin-wine-runner/Icon/Function/wine.png deleted file mode 100755 index c1d36ea..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23A.png b/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23A.png deleted file mode 100755 index e75350d..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23A.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23P.png b/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23P.png deleted file mode 100755 index dcc9ab9..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Function/wine23P.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Internet Explorer.svg b/deb/opt/apps/deepin-wine-runner/Icon/Internet Explorer.svg deleted file mode 100755 index 73349f0..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/Internet Explorer.svg +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Microsoft Office Word.svg b/deb/opt/apps/deepin-wine-runner/Icon/Microsoft Office Word.svg deleted file mode 100755 index cd518d4..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/Microsoft Office Word.svg +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/PhotoShop.svg b/deb/opt/apps/deepin-wine-runner/Icon/PhotoShop.svg deleted file mode 100644 index 3620fda..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/PhotoShop.svg +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Program/Windows虚拟机.png b/deb/opt/apps/deepin-wine-runner/Icon/Program/Windows虚拟机.png deleted file mode 100755 index 8b49a2d..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Program/Windows虚拟机.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Program/webp2.png b/deb/opt/apps/deepin-wine-runner/Icon/Program/webp2.png deleted file mode 100755 index e003a15..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Program/webp2.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Program/webp3.png b/deb/opt/apps/deepin-wine-runner/Icon/Program/webp3.png deleted file mode 100755 index 072f7cf..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Program/webp3.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Program/wine打包器.png b/deb/opt/apps/deepin-wine-runner/Icon/Program/wine打包器.png deleted file mode 100755 index 4ec70d2..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Program/wine打包器.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Program/wine运行器.png b/deb/opt/apps/deepin-wine-runner/Icon/Program/wine运行器.png deleted file mode 100755 index 043fb15..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Program/wine运行器.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/QQ.svg b/deb/opt/apps/deepin-wine-runner/Icon/QQ.svg deleted file mode 100755 index 2b858d4..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/QQ.svg +++ /dev/null @@ -1,342 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Screen/202211121646232464_image.png b/deb/opt/apps/deepin-wine-runner/Icon/Screen/202211121646232464_image.png deleted file mode 100644 index 0a8d474..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/Screen/202211121646232464_image.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Star.svg b/deb/opt/apps/deepin-wine-runner/Icon/Star.svg deleted file mode 100755 index 03c1185..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/Star.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/TIM.svg b/deb/opt/apps/deepin-wine-runner/Icon/TIM.svg deleted file mode 100755 index df383e4..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/TIM.svg +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - image/svg+xml - - tim - - - - - - tim - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/UltraISO.svg b/deb/opt/apps/deepin-wine-runner/Icon/UltraISO.svg deleted file mode 100755 index 868d740..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/UltraISO.svg +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/UnStar.svg b/deb/opt/apps/deepin-wine-runner/Icon/UnStar.svg deleted file mode 100755 index dc4c6fd..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/UnStar.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/Unknown.svg b/deb/opt/apps/deepin-wine-runner/Icon/Unknown.svg deleted file mode 100755 index 96dbeed..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/Unknown.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/cmd.svg b/deb/opt/apps/deepin-wine-runner/Icon/cmd.svg deleted file mode 100755 index 3457482..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/cmd.svg +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C:\>winver - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/compressor.svg b/deb/opt/apps/deepin-wine-runner/Icon/compressor.svg deleted file mode 100755 index e3189ca..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/compressor.svg +++ /dev/null @@ -1,1012 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/doge.png b/deb/opt/apps/deepin-wine-runner/Icon/doge.png deleted file mode 100755 index 0292729..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Icon/doge.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Icon/internet explorer.svg b/deb/opt/apps/deepin-wine-runner/Icon/internet explorer.svg deleted file mode 100755 index 73349f0..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/internet explorer.svg +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - e - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/wine.svg b/deb/opt/apps/deepin-wine-runner/Icon/wine.svg deleted file mode 100755 index 273dc69..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/wine.svg +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/微信.svg b/deb/opt/apps/deepin-wine-runner/Icon/微信.svg deleted file mode 100755 index bab296b..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/微信.svg +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - image/svg+xml - - 微信 - - - - - - 微信 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/腾讯会议.svg b/deb/opt/apps/deepin-wine-runner/Icon/腾讯会议.svg deleted file mode 100644 index 447ba11..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/腾讯会议.svg +++ /dev/null @@ -1,409 +0,0 @@ - - - - - - image/svg+xml - - 2 - - - - - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/腾讯课堂.svg b/deb/opt/apps/deepin-wine-runner/Icon/腾讯课堂.svg deleted file mode 100644 index 76d43e2..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/腾讯课堂.svg +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/Icon/迅雷.svg b/deb/opt/apps/deepin-wine-runner/Icon/迅雷.svg deleted file mode 100755 index 9f89815..0000000 --- a/deb/opt/apps/deepin-wine-runner/Icon/迅雷.svg +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/IconList.json b/deb/opt/apps/deepin-wine-runner/IconList.json deleted file mode 100755 index b9e4b94..0000000 --- a/deb/opt/apps/deepin-wine-runner/IconList.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - [ - ["QQ", "wineBottonPath/drive_c/Program Files/Tencent/QQ/Bin/QQ.exe"], - ["QQ", "wineBottonPath/drive_c/Program Files (x86)/Tencent/QQ/Bin/QQ.exe"], - ["TIM", "wineBottonPath/drive_c/Program Files/Tencent/TIM/Bin/TIM.exe"], - ["TIM", "wineBottonPath/drive_c/Program Files (x86)/Tencent/TIM/Bin/TIM.exe"] - ], - [ - ["cmd", "cmd"], - ["cmd", "cmd.exe"], - ["cmd", "wineBottonPath/drive_c/windows/system32/cmd.exe"], - ["Internet Explorer", "iexplore"], - ["Internet Explorer", "iexplore.exe"], - ["Internet Explorer", "wineBottonPath/drive_c/Program Files/Internet Explorer/iexplore.exe"], - ["Internet Explorer", "wineBottonPath/drive_c/Program Files (x86)/Internet Explorer/iexplore.exe"], - ["微信", "wineBottonPath/drive_c/Program Files/Tencent/WeChat/WeChat.exe"], - ["微信", "wineBottonPath/drive_c/Program Files (x86)/Tencent/WeChat/WeChat.exe"], - ["UltraISO", "wineBottonPath/drive_c/Program Files/UltraISO/UltraISO.exe"], - ["UltraISO", "wineBottonPath/drive_c/Program Files (x86)/UltraISO/UltraISO.exe"], - ["迅雷", "wineBottonPath/drive_c/Program Files/Thunder Network/MiniThunder/Bin/ThunderMini.exe"], - ["迅雷", "wineBottonPath/drive_c/Program Files (x86)/Thunder Network/MiniThunder/Bin/ThunderMini.exe"], - ["Microsoft Office Word", "wineBottonPath/drive_c/Program Files/Microsoft Office/Office12/WINWORD.EXE"], - ["Microsoft Office Word", "wineBottonPath/drive_c/Program Files (x86)/Microsoft Office/Office12/WINWORD.EXE"], - ["腾讯会议", "wineBottonPath/drive_c/Program Files/Tencent/WeMeet/wemeetapp.exe"], - ["腾讯会议", "wineBottonPath/drive_c/Program Files (x86)/Tencent/WeMeet/wemeetapp.exe"], - ["腾讯课堂", "wineBottonPath/drive_c/Program Files/Tencent/EDU/bin/TXEDU.exe"], - ["腾讯课堂", "wineBottonPath/drive_c/Program Files (x86)/Tencent/EDU/bin/TXEDU.exe"] - ] -] \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallBox86.sh b/deb/opt/apps/deepin-wine-runner/InstallBox86.sh deleted file mode 100755 index 2f83d01..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallBox86.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -if [[ `whoami` != root ]]; then - echo 请以 root 权限运行 - echo 按任意键退出 - read - exit 1 -fi -PCArch=`dpkg --print-architecture` -if [[ $PCArch != "aarch64" ]] && [[ $PCArch != "arm64" ]]; then - echo 非 ARM 架构,无法继续 - echo 按任意键退出 - read - exit 1 -fi -which box86 -if [[ $? == 0 ]]; then - echo 已安装,结束 - echo 按回车键退出 - read - exit 1 -fi -#sudo wget https://itai-nelken.github.io/weekly-box86-debs/debian/box86.list -O /etc/apt/sources.list.d/box86.list -echo deb https://code.gitlink.org.cn/gfdgd_xi/weekly-box86-debs/raw/branch/main/debian / > /etc/apt/sources.list.d/box86.list -echo "adding key..." -wget -qO- https://code.gitlink.org.cn/gfdgd_xi/weekly-box86-debs/raw/branch/main/debian/KEY.gpg | sudo apt-key add - -installBox=box86 -if [[ $PCArch == "arm64" ]]; then - installBox="box86 box64" - sudo dpkg --add-architecture armhf -fi -echo " + sudo apt update" -sudo apt update -sudo apt install -y $installBox -echo 安装完成!按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallDll.py b/deb/opt/apps/deepin-wine-runner/InstallDll.py deleted file mode 100755 index 05a2f1d..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallDll.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import traceback -import req as requests -def exit(): - if __name__ == "__main__": - input("按回车键退出") - sys.exit() - sys.exit() -# 获取云列表 -sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls", - "http://gfdgdxi.msns.cn/wine-runner-list/dlls" -] -url = sourcesList[0] -print("获取列表中……", end="") -try: - lists = json.loads(requests.get(f"{url}/list.json").text) -except: - print("\r列表获取失败!") - exit() -print("\r列表获取成功!") - -def GetUrlByNumber(dllID: int) -> str: - dllName = lists[dllID][0] - return f"{url}/{lists[int(dllID)][1]}/{lists[int(dllID)][2]}/{lists[int(dllID)][0]}" - -def GetNameByNumber(dllID: int) -> str: - return lists[dllID][0] - -def GetUrlByName(dllName: str): - for i in range(0, len(lists)): - if dllName == lists[i][0]: - return f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" - -def Download(wineBotton, dllName, urlPart, wine: str) -> bool: - try: - os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") - except: - pass - os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") - #print(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") - #return 0 - -def exit(): - input("按回车键退出") - sys.exit() - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装指定应用") - sys.exit() - if len(sys.argv) <= 1 or sys.argv[1] == "": - print("您未指定需要安装的容器,无法继续") - print("参数:") - print("XXX 参数一") - print("参数一为需要安装的容器") - sys.exit() - print(''' - mmmm ""# ""# - # "m # # - # # # # - # # # # - #mmm" "mm "mm - - -''') - wineBotton = sys.argv[1] - wine = sys.argv[2] - if not os.path.exists(f"{wineBotton}/drive_c/windows/Fonts"): - input("您选择的不是 Wine 容器") - exit() - # 判断是不是 wine 容器 - if not os.path.exists(f"{wineBotton}/drive_c/windows/system32"): - print("这不是 Wine 容器") - exit() - # 获取用户希望安装的DLL - - while True: - print() - print("您可以输入DLL名称进行搜索,输入前面编号或DLL全称即可安装(推荐是编号,可以选系统版本)") - print("输入exit即可退出") - urlPart = "" - while True: - dllName = input(">") - if dllName.lower() == "exit": - exit() - if dllName in lists: - url = dllName - break - try: - dllName = lists[int(dllName)][0] - urlPart = GetUrlByNumber(int(dllName)) - f"{url}/{lists[int(dllName)][1]}/{lists[int(dllName)][2]}/{lists[int(dllName)][0]}" - break - except: - pass - right = False - for i in range(0, len(lists)): - if dllName == lists[i][0]: - right = True - urlPart = f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" - break - if dllName in lists[i][0]: - print(i, lists[i][0], f"平台:{lists[i][1]}", f"架构:{lists[i][2]}") - if right: - break - if os.path.exists(f"{wineBotton}/drive_c/windows/system32/{dllName}"): - if input(f"{dllName} 已存在,是否覆盖?(一般不推荐)[Y/N]").upper() == "N": - continue - try: - os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") - except: - print("文件移除失败!") - traceback.print_exc() - continue - # 下载 DLL - print(f"正在下载{dllName},请稍后") - print(f"下载链接:{urlPart}") - if Download(wineBotton, dllName, urlPart, wine): - print("下载失败!请重试") diff --git a/deb/opt/apps/deepin-wine-runner/InstallFont.py b/deb/opt/apps/deepin-wine-runner/InstallFont.py deleted file mode 100755 index 38c3866..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallFont.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import shutil -import updatekiller -import req as requests -homePath = os.path.expanduser('~') -try: - sources = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/fonts/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/fonts/list.json" - ] - fontList = json.loads(requests.get(sources[0]).text) -except: - fontList = [ - ["fake_simsun.ttc", "https://gitlink.org.cn/api/attachments/392168", "simsun.ttc", "fake_simsun.ttc(会替换容器内的宋体,且与 deepin 有问题)"], - ["simsun.ttc", "https://gitlink.org.cn/api/attachments/392181", "simsun.ttc", "simsun.ttc"], - ["simsunb.ttf", "https://gitlink.org.cn/api/attachments/392180", "simsunb.ttf", "simsunb.ttf"], - ["msyh.ttc", "https://gitlink.org.cn/api/attachments/392182", "msyh.ttc", "msyh.ttc"], - ["msyhl.ttc", "https://gitlink.org.cn/api/attachments/392184", "msyhl.ttc", "msyhl.ttc"], - ["msyhbd.ttc", "https://gitlink.org.cn/api/attachments/392183", "msyhbd.ttc", "msyhbd.ttc"] -] -def Download(wineBotton: str, id: int) -> int: - return os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/Fonts/' -o '{fontList[id][0]}' \"{fontList[id][1]}\"") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装指定应用") - sys.exit() - if len(sys.argv) <= 1 or sys.argv[1] == "": - print("您未指定需要安装的容器,无法继续") - print("参数:") - print("XXX 参数一") - print("参数一为需要安装的容器") - sys.exit() - while True: - os.system("clear") - print(''' - mmmmmm m - # mmm m mm mm#mm mmm - #mmmmm #" "# #" # # # " - # # # # # # """m - # "#m#" # # "mm "mmm" - - -''') - if not os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts"): - input("您选择的不是 Wine 容器,无法继续,按回车键退出") - exit() - - for i in range(0, len(fontList)): - print(f"{i} {fontList[i][3]}") - while True: - try: - choose = input("请输入要选择的 字体(输入“exit”退出):").lower() - if choose == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(fontList): - break - if choose == "exit": - exit() - print(f"您选择了字体 {fontList[choose][0]}") - if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}"): - print("已经缓存,使用本地版本") - if os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}"): - print("字体已存在,覆盖") - shutil.copy(f"{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}", f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}") - input("安装结束,按回车键继续") - continue - print("开始下载") - os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}'") - os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/font'") - os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/font' -o '{fontList[choose][0]}' \"{fontList[choose][1]}\"") - if os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}"): - print("字体已存在,覆盖") - try: - shutil.copy(f"{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}", f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}") - except: - print("拷贝失败!") - input("安装结束,按回车键继续") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallMono.py b/deb/opt/apps/deepin-wine-runner/InstallMono.py deleted file mode 100755 index 5529dc8..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallMono.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import updatekiller -import traceback -import pyquery - -if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 mono、gecko") - sys.exit() -if len(sys.argv) <= 3 or sys.argv[1] == "" or sys.argv[2] == "" or sys.argv[3] == "": - print("您未指定需要安装 gecko 或者 mono 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三 参数四(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为安装gecko或mono(gecko/mono),参数四为是否缓存(可略),四个参数位置不能颠倒") - sys.exit() - -if sys.argv[3] == "mono": - print(''' - m m - ## ## mmm m mm mmm - # ## # #" "# #" # #" "# - # "" # # # # # # # - # # "#m#" # # "#m#" - - -''') -else: - print(''' - mmm # - m" " mmm mmm # m mmm - # mm #" # #" " # m" #" "# - # # #"""" # #"# # # - "mmm" "#mm" "#mm" # "m "#m#" - - -''') -homePath = os.path.expanduser('~') -try: - exitInputShow = int(os.getenv("ENTERNOTSHOW")) -except: - exitInputShow = True -try: - # 获取最新版本的版本号 - programVersionList = pyquery.PyQuery(url=f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/") -except: - print("无法连接下载服务器,将使用本地缓存") - if not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi") or not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt"): - print("无本地缓存数据,无法进行、结束") - if exitInputShow: - input("按回车键退出") - exit() - file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r") - version = file.read().replace("\n", "") - print("安装版本:", version) - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") - if exitInputShow: - input("安装结束,按回车键退出") - exit() -programVersion = programVersionList("a:last-child").attr.href -# 获取最新版本安装包的URL -programUrl = pyquery.PyQuery(url=f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/{programVersion}") -programDownloadUrl = "" -programFileName = "" -for i in programUrl("a").items(): - if i.attr.href[-4:] == ".msi": - programDownloadUrl = f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/{programVersion}{i.attr.href}" - programFileName = i.attr.href - break - -if programDownloadUrl == "": - print("无法获取链接,无法继续") - sys.exit() -print(f"当前选择的程序获取路径:{programDownloadUrl}") -if not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}"): - os.makedirs(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}") -if len(sys.argv) <= 4: - choice = True -else: - choice = (sys.argv[3] == "1") -if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi") and os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt") and choice: - print("版本号校验") - file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r") - version = file.read().replace("\n", "") - if version == programVersion.replace("\n", ""): - print("缓存版本:", version.replace("/", "")) - print("已经缓存,使用本地版本") - file.close() - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") - if exitInputShow: - input("安装结束,按回车键退出") - exit() - -file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "w+") -print("开始下载") -os.system(f"rm -rf \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") -os.system("mkdir -p /tmp/winegeckomonoinstall") -os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}\" -o install.msi \"{programDownloadUrl}\"") -print("开始安装") -os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") -try: - if sys.argv[4] == "1": - print("写入缓存") - file.write(programVersion) - file.close() - else: - print("删除临时文件") - os.system(f"rm -rf \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}\"") -except: - print("写入缓存") - file.write(programVersion) - file.close() -if exitInputShow: - input("安装结束,按回车键退出") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallMsxml.py b/deb/opt/apps/deepin-wine-runner/InstallMsxml.py deleted file mode 100755 index 476259f..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallMsxml.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import req as requests -try: - sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/msxml/list.json" - ] - msxmlList = json.loads(requests.get(sourcesList[0]).text) -except: - msxmlList = [ - ["MSXML 4.0 SP2", "https://www.gitlink.org.cn/api/attachments/390679?gfdgd_xi", "msxml6.0.msi"], - ["MSXML 4.0 SP3", "https://www.gitlink.org.cn/api/attachments/390678?gfdgd_xi", "msxml4.0SP3.msi"], - ["MSXML 6.0", "https://www.gitlink.org.cn/api/attachments/390681?gfdgd_xi", "msxml6_x64.msi"] - ] - -def Download(wineBotton: str, id: int, wine: str): - os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-msxml/\" -o \"{msxmlList[id][2]}\" \"{msxmlList[id][1]}\"") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 MSXML") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 MSXML 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - - homePath = os.path.expanduser('~') - print(''' - m m mmmm m m m m m - ## ## #" " # # ## ## # - # ## # "#mmm ## # ## # # - # "" # "# m""m # "" # # - # # "mmm#" m" "m # # #mmmmm - - -''') - - print("请选择以下的 MSXML 进行安装(不保证能正常安装运行)") - for i in range(0, len(msxmlList)): - print(f"{i}、{msxmlList[i][0]}") - while True: - try: - choose = input("请输入要选择要安装的 MSXML(输入“exit”退出):") - if choose.lower() == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(msxmlList): - break - try: - if choose.lower() == "exit": - exit() - except: - pass - print(f"您选择了 {msxmlList[choose][0]}") - if len(sys.argv) <= 3: - choice = True - else: - choice = (sys.argv[3] == "1") - if os.path.exists(f"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}") and choice: - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") - input("安装结束,按回车键退出") - exit() - print("开始下载") - os.system(f"rm -rfv \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") - os.system(f"mkdir -p \"{homePath}/.config/deepin-wine-runner/MSXML/\"") - os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.config/deepin-wine-runner/MSXML\" -o \"{msxmlList[choose][2]}\" \"{msxmlList[choose][1]}\"") - print("开始安装") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") - input("安装结束,按回车键退出") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py b/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py deleted file mode 100755 index 50646da..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import req as requests -try: - sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/net/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/net/list.json" - ] - netList = json.loads(requests.get(sourcesList[0]).text) -except: - netList = [ - ["Microsoft® .NET Framework 1.1 版可转散发套件", "https://download.microsoft.com/download/8/2/7/827bb1ef-f5e1-4464-9788-40ef682930fd/dotnetfx.exe"], - ["Microsoft .NET Framework 2.0 Service Pack 1 (x86)", "https://download.microsoft.com/download/0/8/c/08c19fa4-4c4f-4ffb-9d6c-150906578c9e/NetFx20SP1_x86.exe"], - ["3.5 SP1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/b635098a-2d1d-4142-bef6-d237545123cb/2651b87007440a15209cac29634a4e45/dotnetfx35.exe"], - ["4.0 Offline Installer", "https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"], - ["4.5 Web Installer", "https://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_setup.exe"], - ["4.5.1 Offline Installer", "https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe"], - ["4.5.2 Offline Installer", "https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe"], - ["4.6 Offline Installer", "https://download.microsoft.com/download/6/F/9/6F9673B1-87D1-46C4-BF04-95F24C3EB9DA/enu_netfx/NDP46-KB3045557-x86-x64-AllOS-ENU_exe/NDP46-KB3045557-x86-x64-AllOS-ENU.exe"], - ["4.6.1 Offline Installer", "https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe"], - ["4.6.2 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/8e396c75-4d0d-41d3-aea8-848babc2736a/80b431456d8866ebe053eb8b81a168b3/ndp462-kb3151800-x86-x64-allos-enu.exe"], - ["4.7 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/2dfcc711-bb60-421a-a17b-76c63f8d1907/e5c0231bd5d51fffe65f8ed7516de46a/ndp47-kb3186497-x86-x64-allos-enu.exe"], - ["4.7.1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/4312fa21-59b0-4451-9482-a1376f7f3ba4/9947fce13c11105b48cba170494e787f/ndp471-kb4033342-x86-x64-allos-enu.exe"], - ["4.7.2 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/1f5af042-d0e4-4002-9c59-9ba66bcf15f6/089f837de42708daacaae7c04b7494db/ndp472-kb4054530-x86-x64-allos-enu.exe"], - ["4.8 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe"], - ["4.8.1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/6f083c7e-bd40-44d4-9e3f-ffba71ec8b09/3951fd5af6098f2c7e8ff5c331a0679c/ndp481-x86-x64-allos-enu.exe"], - [".NET 5.0 Desktop Runtime (v5.0.17) - Windows x86 Installer", "https://download.visualstudio.microsoft.com/download/pr/b6fe5f2a-95f4-46f1-9824-f5994f10bc69/db5ec9b47ec877b5276f83a185fdb6a0/windowsdesktop-runtime-5.0.17-win-x86.exe"], - [".NET 5.0 Desktop Runtime (v5.0.17) - Windows x64 Installer", "https://download.visualstudio.microsoft.com/download/pr/3aa4e942-42cd-4bf5-afe7-fc23bd9c69c5/64da54c8864e473c19a7d3de15790418/windowsdesktop-runtime-5.0.17-win-x64.exe"], - [".NET 5.0 Desktop Runtime (v5.0.17) - Windows Arm64 Installer", "https://download.visualstudio.microsoft.com/download/pr/be25784a-4231-4c53-ba6e-869166ef523f/9602c6c0d358d31dc710fd0573fc39e0/windowsdesktop-runtime-5.0.17-win-arm64.exe"], - [".NET Core 3.0 Desktop Runtime (v3.0.3) - Windows x86 Installer", "https://download.visualstudio.microsoft.com/download/pr/e312618d-85c4-4cad-b660-569b5522eca9/e951e76ebe011b5d3ea1289ef68e8281/windowsdesktop-runtime-3.0.3-win-x86.exe"], - [".NET Core 3.0 Desktop Runtime (v3.0.3) - Windows x64 Installer", "https://download.visualstudio.microsoft.com/download/pr/c525a2bb-6e98-4e6e-849e-45241d0db71c/d21612f02b9cae52fa50eb54de905986/windowsdesktop-runtime-3.0.3-win-x64.exe"], - [".NET Core 3.1 Desktop Runtime (v3.1.28) - Windows x86 Installer", "https://download.visualstudio.microsoft.com/download/pr/d2ec7ca2-017d-4d06-a6da-3707daa3c3b1/1f2e108653e3d8316e1657105ef24b93/windowsdesktop-runtime-3.1.28-win-x86.exe"], - [".NET Core 3.1 Desktop Runtime (v3.1.28) - Windows x64 Installer", "https://download.visualstudio.microsoft.com/download/pr/5c74593e-f156-44c8-9957-f11996de72bc/d3e0e26c64a5a2d860c5c0deca975d78/windowsdesktop-runtime-3.1.28-win-x64.exe"], - [".NET 6.0 Desktop Runtime (v6.0.8) - Windows x86 Installer", "https://download.visualstudio.microsoft.com/download/pr/61747fc6-7236-4d5e-85e5-a5df5f480f3a/02203594bf1331f0875aa6491419ffa1/windowsdesktop-runtime-6.0.8-win-x86.exe"], - [".NET 6.0 Desktop Runtime (v6.0.8) - Windows x64 Installer", "https://download.visualstudio.microsoft.com/download/pr/b4a17a47-2fe8-498d-b817-30ad2e23f413/00020402af25ba40990c6cc3db5cb270/windowsdesktop-runtime-6.0.8-win-x64.exe"], - [".NET 6.0 Desktop Runtime (v6.0.8) - Windows Arm64 Installer", "https://download.visualstudio.microsoft.com/download/pr/17737b16-dbb0-45f8-9684-16cce46f0835/14475e8380422840249513d58c70d8da/windowsdesktop-runtime-6.0.8-win-arm64.exe"] - ] - -def Download(wineBotton: str, id: int, wine: str): - programName = os.path.split(netList[id][1])[1] - os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-net\" -o \"{programName}\" \"{netList[id][1]}\"") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-net/{programName}'") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 .net framework") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 .net framework 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - - homePath = os.path.expanduser('~') - print(''' - mm m mmmmmmmmmmmmm - #"m # # # - # #m # #mmmmm # - # # # # # - # # ## #mmmmm # - - -''') - print("请选择以下的 .net framework 进行安装(不保证能正常安装运行)") - for i in range(0, len(netList)): - print(f"{i} .net framework {netList[i][0]}") - while True: - try: - choose = input("请输入要选择的 .net framework 版本(输入“exit”退出):").lower() - if choose == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(netList): - break - - if choose == "exit": - exit() - if len(sys.argv) <= 3: - choice = True - else: - choice = (sys.argv[3] == "1") - print(f"您选择了 .net framework {netList[choose][0]}") - print(f"如果是 Offline Installer 版本,提示需要连接互联网,其实是不需要的,断网也可以安装") - print(f"如果 Offline Installer 版本连接网络时安装失败,提示无法连接服务器或连接超时,可以尝试下载完安装包加载过程中断网以便断网安装") - print(f"一般建议 Offline Installer 版本在下载完 exe 安装程序后在加载过程中断网以便提高安装速度") - programName = os.path.split(netList[choose][1])[1] - if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/.netframework/{programName}") and choice: - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") - input("安装结束,按回车键退出") - exit() - print("开始下载") - os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") - os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/.netframework'") - os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/.netframework\" -o \"{programName}\" \"{netList[choose][1]}\"") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") - input("安装结束,按回车键退出") diff --git a/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh b/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh deleted file mode 100755 index 7a25032..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash -# 使用系统默认的 bash 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.2.0 -# 更新时间:2022年09月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -echo -echo 'm m " m m mmmm ' -echo '# # # mmm m mm mmm # # m" "m' -echo '" #"# # # #" # #" # #mmmm# # #' -echo ' ## ##" # # # #"""" # # # #' -echo ' # # mm#mm # # "#mm" # # #mm#"' -echo ' # ' - - -ubuntuSource=( - "echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ jammy main | sudo tee /etc/apt/sources.list.d/winehq.list" - "sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/impish/winehq-impish.sources" - "echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ focal main | sudo tee /etc/apt/sources.list.d/winehq.list" - "echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ bionic main | sudo tee /etc/apt/sources.list.d/winehq.list" -) -debianSource=( - "echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ buster main | sudo tee /etc/apt/sources.list.d/winehq.list" - "echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ bullseye main | sudo tee /etc/apt/sources.list.d/winehq.list" - "sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources" -) -# 选择发行版 -echo "WineHQ 官网:https://wiki.winehq.org/" -echo "国内镜像源:https://mirrors-i.tuna.tsinghua.edu.cn/help/wine-builds/" -echo -echo "选择发行版:" -echo "0. Debian" -echo "1. Ubuntu" -read system -# 选择版本 -echo "选择系统版本" -if [ $system = "0" ]; then - echo "0. Debian 10 (Buster)" - echo "1. Debian 11 (Bullseye)" - echo "2. Debian Testing (Bookworm)" -fi -if [ $system = "1" ]; then - echo "0. Ubuntu 22.04" - echo "1. Ubuntu 21.10" - echo "2. Ubuntu 20.04,Linux Mint 20.x" - echo "3. Ubuntu 18.04,Linux Mint 19.x" -fi -read systemVersion -# 选择 Wine -echo "选择 Wine:" -echo "0. 稳定分支" -echo "1. 开发分支" -echo "2. Staging 分支" -read programVersion -# 初步配置 -sudo apt-key del "D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F" -sudo dpkg --add-architecture i386 -sudo wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key -# 检测 apt-fast 或 ss-apt-fast 是否存在 -apt="apt" -which apt-fast > /dev/null -if [ $? == 0 ]; then - apt="apt-fast" -fi -which ss-apt-fast > /dev/null -if [ $? == 0 ]; then - apt="ss-apt-fast" -fi -which aptss > /dev/null -if [ $? == 0 ]; then - apt="aptss" -fi -# 添加源 -if [ $system = "0" ]; then - bash -c "${debianSource[$systemVersion]}" -fi -if [ $system = "1" ]; then - bash -c "${ubuntuSource[$systemVersion]}" -fi -sudo $apt update -# 安装 Wine -wineInstall=("sudo $apt install --install-recommends winehq-stable" "sudo $apt install --install-recommends winehq-devel" "sudo $apt install --install-recommends winehq-staging") -${wineInstall[$programVersion]} -echo "按回车键退出" -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallOther.py b/deb/opt/apps/deepin-wine-runner/InstallOther.py deleted file mode 100755 index 1e6f47d..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallOther.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import req as requests -try: - sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/other/list.json" - ] - msxmlList = json.loads(requests.get(sourcesList[0]).text) -except: - msxmlList = [ - ["Windows Script 5.7 for Windows XP", "https://download.microsoft.com/download/f/f/e/ffea3abf-b55f-4924-b5a5-bde0805ad67c/scripten.exe", "exe", "scripten.exe"], - ["Windows Management Instrumentation 1.50.1131", "https://www.gitlink.org.cn/api/attachments/390680", "exe", "WMITools.exe"] - ] - -def Download(wineBotton: str, id: int, wine: str) -> int: - try: - os.remove(f"/tmp/deepin-wine-runner-other/{msxmlList[id][2]}") - except: - pass - os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-other' -o '{msxmlList[id][3]}' \"{msxmlList[id][1]}\"") - if msxmlList[id][2] == "exe": - return os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-other/{msxmlList[id][3]}'") - if msxmlList[id][2] == "msi": - return os.system(f"WINEPREFIX='{wineBotton}' {wine} msiexec /i '/tmp/deepin-wine-runner-other/{msxmlList[id][3]}'") -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装运行库") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - - homePath = os.path.expanduser('~') - print(''' - mmmm m # - m" "m mm#mm # mm mmm m mm - # # # #" # #" # #" " - # # # # # #"""" # - #mm# "mm # # "#mm" # - - -''') - print("请选择以下的应用进行安装(不保证能正常安装运行)") - for i in range(0, len(msxmlList)): - print(f"{i}、{msxmlList[i][0]}") - while True: - try: - choose = input("请输入要选择要安装的应用(输入“exit”退出):").lower() - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(msxmlList): - break - if choose == "exit": - exit() - if len(sys.argv) <= 3: - choice = True - else: - choice = (sys.argv[3] == "1") - print(f"您选择了{msxmlList[choose][0]}") - if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}") and choice: - print("已经缓存,使用本地版本") - if msxmlList[choose][2] == "msi": - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") - input("安装结束,按回车键退出") - sys.exit() - if msxmlList[choose][2] == "exe": - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") - input("安装结束,按回车键退出") - sys.exit() - print("开始下载") - os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") - os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/other'") - if msxmlList[choose][2] == "msi": - os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"") - print("开始安装") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") - print("安装结束") - sys.exit() - if msxmlList[choose][2] == "exe": - os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"") - print("开始安装") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") - input("安装结束,按回车键退出") - sys.exit() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallQemuUser.sh b/deb/opt/apps/deepin-wine-runner/InstallQemuUser.sh deleted file mode 100755 index 271aced..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallQemuUser.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# 判断是否有安装 Qemu User -which qemu-i386 > /dev/null -if [[ $? == 0 ]]; then - echo 您已安装过 Qemu User,按回车键后退出 - read - exit 1 -fi -sudo apt update -sudo apt install binfmt-support qemu-user qemu-user-static -y -echo 安装完成,按回车键后退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/amd64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/amd64.sh deleted file mode 100755 index f912f54..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/amd64.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=amd64 -libPath=/usr/lib/x86_64-linux-gnu/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo dpkg -i /tmp/$fileName -sudo apt install qemu-user qemu-user-static binfmt-support -y -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/arm64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/arm64.sh deleted file mode 100755 index 1395b93..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/arm64.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=arm64 -libPath=/usr/lib/aarch64-linux-gnu -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo apt install qemu-user qemu-user-static binfmt-support -y -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/armhf.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/armhf.sh deleted file mode 100755 index 8b06e95..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/armhf.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=armhf -libPath=/usr/lib/arm-linux-gnueabihf/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo apt install qemu-user qemu-user-static binfmt-support -y -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/i386.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/i386.sh deleted file mode 100755 index 9d5fa9a..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/i386.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=i386 -libPath=/usr/lib/i386-linux-gnu/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo apt install qemu-user qemu-user-static binfmt-support -y -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/mips64el.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/mips64el.sh deleted file mode 100755 index fb439a2..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/mips64el.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=mips64el -libPath=/usr/lib/mips64el-linux-gnuabi64 -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo apt install qemu-user qemu-user-static binfmt-support -y -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/ppc64el.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/ppc64el.sh deleted file mode 100755 index 346a355..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/ppc64el.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -arch=ppc64el -libPath=/usr/lib/powerpc64le-linux-gnu/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo apt install qemu-user qemu-user-static binfmt-support -y -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/amd64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/amd64.sh deleted file mode 100755 index 2f0fc0f..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/amd64.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=amd64 -libPath=/usr/lib/x86_64-linux-gnu/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/arm64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/arm64.sh deleted file mode 100755 index a50777d..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/arm64.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=arm64 -libPath=/usr/lib/aarch64-linux-gnu -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/armhf.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/armhf.sh deleted file mode 100755 index 4757aa2..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/armhf.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=armhf -libPath=/usr/lib/arm-linux-gnueabihf/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/i386.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/i386.sh deleted file mode 100755 index 7a93623..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/i386.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=i386 -libPath=/usr/lib/i386-linux-gnu/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/mips64el.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/mips64el.sh deleted file mode 100755 index 39cb2bc..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/mips64el.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=mips64el -libPath=/usr/lib/mips64el-linux-gnuabi64/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/ppc64el.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/ppc64el.sh deleted file mode 100755 index d0e02e1..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/ppc64el.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=ppc64el -libPath=/usr/lib/powerpc64le-linux-gnu/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/riscv64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/riscv64.sh deleted file mode 100755 index a7294b1..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/riscv64.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=riscv64 -libPath=/usr/lib/riscv64-linux-gnu/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/s390x.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/s390x.sh deleted file mode 100755 index c3b39ce..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/remove/s390x.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -arch=s390x -libPath=/usr/lib/s390x-linux-gnu/ -package=$arch-runtime-for-qemu - -if [[ ! -d $libPath ]]; then - echo "未安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -sudo apt purge $package -y -echo 卸载完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/riscv64.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/riscv64.sh deleted file mode 100755 index b153d30..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/riscv64.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -arch=riscv64 -libPath=/usr/lib/riscv64-linux-gnu/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallRuntime/s390x.sh b/deb/opt/apps/deepin-wine-runner/InstallRuntime/s390x.sh deleted file mode 100755 index ccdd1ce..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallRuntime/s390x.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -arch=s390x -libPath=/usr/lib/s390x-linux-gnu/ -version=1.0.0 -url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb" -fileName=`basename $url` - -if [[ -d $libPath ]]; then - echo "已安装 $arch 运行库,按回车键退出" - read - exit 1 -fi -if [[ -f /tmp/$fileName ]]; then - rm "/tmp/$fileName" -fi -aria2c -x 16 -s 16 -c $url -d /tmp -o $fileName -sudo apt update -sudo dpkg -i /tmp/$fileName -echo 安装完成,按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallVisualBasicRuntime.py b/deb/opt/apps/deepin-wine-runner/InstallVisualBasicRuntime.py deleted file mode 100755 index efc1654..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallVisualBasicRuntime.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年10月05日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import req as requests -try: - sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/vb/list.json" - ] - netList = json.loads(requests.get().text) -except: - netList = [ - ["Visual Basic 1(DOS application)", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun100.exe", "vbrun100.exe"], - ["Visual Basic 2(DOS application)", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun200.exe", "vbrun200.exe"], - ["Visual Basic 3", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vb3run.exe", "vb3run.exe"], - ["Visual Basic 4", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vb4run.exe", "vb4run.exe"], - ["Visual Basic 6", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun60sp4.exe", "vbrun60sp4.exe"] - ] -def Download(wineBotton: str, id: int, wine: str) -> int: - try: - os.remove(f"/tmp/deepin-wine-runner-vb/{netList[id][2]}") - except: - pass - os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-vb' -o '{netList[id][2]}' \"{netList[id][1]}\"") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-vb/{netList[id][2]}'") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 Visual Basic Runtime") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 Visual Basic Runtime 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - - homePath = os.path.expanduser('~') - print(''' - m m mmmmm - "m m" # # - # # #mmmm" - "mm" # # - ## #mmmm" - - -''') - - print("请选择以下的 Visual Basic Runtime 进行安装(不保证能正常安装运行)") - for i in range(0, len(netList)): - print(f"{i} Visual Basic Runtime {netList[i][0]}") - while True: - try: - choose = input("请输入要选择的 Visual Basic Runtime 版本(输入“exit”退出):").lower() - if choose == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(netList): - break - if choose == "exit": - exit() - print(f"您选择了 Visual Basic Runtime {netList[choose][0]}") - if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vb/{netList[choose][2]}"): - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vb/{netList[choose][2]}'") - input("安装结束,按回车键退出") - exit() - print("开始下载") - os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vb/{netList[choose][2]}'") - os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vb'") - os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vb' -o '{netList[choose][2]}' \"{netList[choose][1]}\"") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vb/{netList[choose][2]}'") - input("安装结束,按回车键退出") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py b/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py deleted file mode 100755 index d57360b..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import req as requests -try: - sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/list.json", - "http://gfdgdxi.msns.cn/wine-runner-list/vscpp/list.json" - ] - netList = json.loads(requests.get(sourcesList[0]).text) -except: - netList = [ - ["VC6 运行库", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/VC6RedistSetup_deu.exe", "VC6RedistSetup_deu.exe"], - ["2005 Service Pack 1 Redistributable Package MFC 安全更新", "https://download.microsoft.com/download/4/A/2/4A22001F-FA3B-4C13-BF4E-42EC249D51C4/vcredist_x86.EXE", "vcredist05_x86.exe"], - ["2008 (VC++ 9.0) SP1 (不再支持) X86", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe", "vcredist08_x86.exe"], - ["2008 (VC++ 9.0) SP1 (不再支持) X64", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe", "vcredist08_x86.exe"], - ["2010 (VC++ 10.0) SP1 (不再支持) X86", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x86.exe"], - ["2010 (VC++ 10.0) SP1 (不再支持) X64", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x64.exe"], - ["2012 (VC++ 11.0) Update 4 X86", "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe", "vcredist12_x86.exe"], - ["2012 (VC++ 11.0) Update 4 X64", "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe", "vcredist12_x64.exe"], - ["2013 (VC++ 12.0) X86", "https://aka.ms/highdpimfc2013x86enu", "vcredist13_x86.exe"], - ["2013 (VC++ 12.0) X64", "https://aka.ms/highdpimfc2013x64enu", "vcredist13_x64.exe"], - ["2015、2017、2019 和 2022 X86", "https://aka.ms/vs/17/release/vc_redist.x86.exe", "vc_redist15.x86.exe"], - ["2015、2017、2019 和 2022 X64", "https://aka.ms/vs/17/release/vc_redist.x64.exe", "vc_redist15.x64.exe"], - ["2015、2017、2019 和 2022 ARM64", "https://aka.ms/vs/17/release/vc_redist.arm64.exe", "vc_redist15.arm64.exe"] - ] -def Download(wineBotton: str, id: int, wine: str) -> int: - try: - os.remove(f"/tmp/deepin-wine-runner-vcpp/{netList[id][2]}") - except: - pass - os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-vcpp' -o '{netList[id][2]}' \"{netList[id][1]}\"") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-vcpp/{netList[id][2]}'") - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 Visual Studio C++") - sys.exit() - if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 Visual Studio C++ 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - - homePath = os.path.expanduser('~') - print(''' - m m mmm - "m m" m" " m m - # # # # # - "mm" # """#""""""#""" - ## "mmm" # # - - -''') - - print("请选择以下的 Visual Studio C++ 进行安装(不保证能正常安装运行)") - for i in range(0, len(netList)): - print(f"{i} Visual Studio C++ {netList[i][0]}") - while True: - try: - choose = input("请输入要选择的 Visual Studio C++ 版本(输入“exit”退出):").lower() - if choose == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(netList): - break - if choose == "exit": - exit() - print(f"您选择了 Visual Studio C++ {netList[choose][0]}") - if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"): - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") - input("安装结束,按回车键退出") - exit() - print("开始下载") - os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") - os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'") - os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vcpp' -o '{netList[choose][2]}' \"{netList[choose][1]}\"") - os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") - input("安装结束,按回车键退出") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py b/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py deleted file mode 100755 index fb72bf0..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import updatekiller - -def InstallWithDeepinSource(program): - os.system(f"sudo cp '{programPath}/deepin.list' /etc/apt/sources.list.d/deepin20-withwinerunner.list") - os.system(f"sudo dpkg --add-architecture i386") - os.system(f"sudo apt update") - os.system(f"sudo apt install {program}") - os.system(f"sudo rm /etc/apt/sources.list.d/deepin20-withwinerunner.list") - os.system(f"sudo apt update") - os.system(f"sudo dpkg --remove-architecture i386") - os.system(f"sudo apt update") - -def InstallWithSparkStoreSource(program): - os.system(f"sudo cp '{programPath}/sparkstore.list' /etc/apt/sources.list.d/sparkstore-withwinerunner.list") - os.system(f"sudo cp '{programPath}/deepin.list' /etc/apt/sources.list.d/deepin20-withwinerunner.list") - os.system(f"sudo dpkg --add-architecture i386") - os.system(f"sudo mkdir /tmp/spark-store-install") - os.system(f"sudo rm -rf /tmp/spark-store-install/spark-store.asc") - os.system(f"sudo wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc") - os.system(f"sudo gpg --dearmor /tmp/spark-store-install/spark-store.asc") - os.system(f"sudo apt update") - os.system(f"sudo apt install {program}") - os.system(f"sudo rm /etc/apt/sources.list.d/sparkstore-withwinerunner.list") - os.system(f"sudo rm /etc/apt/sources.list.d/deepin20-withwinerunner.list") - os.system(f"sudo apt update") - os.system(f"sudo dpkg --remove-architecture i386") - os.system(f"sudo apt update") - -def Repair(): - print("修复中……") - os.system(f"rm -f /etc/apt/sources.list.d/sparkstore-withwinerunner.list") - os.system(f"rm -f /etc/apt/sources.list.d/deepin20-withwinerunner.list") - print("修复完成!") - -if __name__ == "__main__": - print(''' -m m " -# # # mmm m mm mmm -" #"# # # #" # #" # - ## ##" # # # #"""" - # # mm#mm # # "#mm" - - -''') - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - print("能不用这个就不用这个!!!真心建议!!!\n") - print("下面的安装过程皆需要换源等操作,安装过程千万不要中断,以及千万不要 apt upgrade,感谢\n") - print("如果真一不小心中断了,可以在下面输入“repair”进行修复") - print("所有操作均需要 Root 权限,请知悉\n") - print("千万不要中断且 apt upgrade、千万不要中断且 apt upgrade、千万不要中断且 apt upgrade,重要的事情说三遍") - print("以及无法保证安装的 Wine 能使用、无法保证安装的 Wine 能使用、无法保证安装的 Wine 能使用,重要的事情说三遍") - repair = input("按回车后继续") - if repair.lower() == "repair": - Repair() - exit() - for i in [ - ["原版 Wine(Wine64)", "wine"], - ["deepin-wine5-stable", "deepin-wine5-stable"], - ["deepin-wine6-stable", "deepin-wine6-stable"] - ]: - if not os.system(f"which {i[1]} > /dev/null"): - continue - choose = input(f"安装{i[0]}?(添加深度源)[Y/N]").upper() - if choose == "Y": - print("安装中……") - InstallWithDeepinSource(i[1]) - print("安装完成!") - #exit() - for i in [ - ["deepin-wine", "deepin-wine"], - ["spark-wine7-devel", "spark-wine7-devel"] - ]: - if not os.system(f"which {i[1]} > /dev/null"): - continue - choose = input(f"安装{i[0]}?(添加深度、星火源)[Y/N]").upper() - if choose == "Y": - InstallWithSparkStoreSource(i[1]) - input("按回车键后退出……") - exit() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23Alpha.py b/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23Alpha.py deleted file mode 100755 index 569caa3..0000000 --- a/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23Alpha.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.5.0 -# 更新时间:2022年11月15日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import webbrowser -import updatekiller - -def YesOrNo(): - if input().replace(" ", "").upper() == "N": - return False - return True - -def InstallWineSpark(wine): - print(f"开始安装 {wine}") - #os.system("pkexec apt update") - if not os.system(f"pkexec aptss install {wine} -y"): - print(f"{wine} 安装失败!") - PressEnter() - else: - print("安装完成") - -def InstallWine(wine): - print(f"开始安装 {wine}") - os.system("pkexec apt update") - if not os.system(f"pkexec apt install {wine} -y"): - print(f"{wine} 安装失败!") - PressEnter() - else: - print("安装完成") - -def CheckSparkStore(): - return os.system("which spark-store > /dev/null") + os.system("which aptss > /dev/null") - -def InstallSparkStore(): - if not CheckSparkStore: - return - print("按下回车键后打开星火应用商店官网,手动安装完星火应用商店后再次按下回车以继续") - webbrowser.open_new_tab("https://spark-app.store/") - PressEnter() - print("安装星火应用商店后按下回车……") - PressEnter() - while True: - if not os.system("which spark-store > /dev/null"): - if not os.system("which aptss > /dev/null"): - break - print("您暂未安装最新版本的星火应用商店,请更新版本后按下回车") - PressEnter() - continue - print("您暂未安装星火应用商店,请在安装后按下回车") - PressEnter() - continue - -def InstallDeepinAppStore(): - print("开始安装官方应用商店") - if not os.system("pkexec apt install deepin-app-store -y"): - print("安装失败!按回车键后退出") - PressEnter() - exit() - else: - print("安装完成") - -def PressEnter(): - input("按回车键后继续……") - -if __name__ == "__main__": - print(''' -m m " -# # # mmm m mm mmm -" #"# # # #" # #" # - ## ##" # # # #"""" - # # mm#mm # # "#mm" - - -''') - print("后续操作需要有 root 权限") - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - # 敢这样浪不还是 Alpha 源有官方应用商店 - if os.system("which deepin-home-appstore-client > /dev/null"): - print("暂未安装官方应用商店,安装后才能继续,是否安装?[Y/N]") - if YesOrNo: - InstallDeepinAppStore() - deepinWineList = [ - #"deepin-wine", - #"deepin-wine5-stable", - "deepin-wine6-stable" - ] - for i in deepinWineList: - if not os.system(f"which {i} > /dev/null"): - print(f"{i} 已安装") - continue - print(f"是否安装 {i}?[Y/N]") - if YesOrNo: - InstallWine(i) - sparkWineList = [ - #"deepin-wine", - #"deepin-wine5", - #"spark-wine7-devel" - ] - for i in sparkWineList: - if not os.system(f"which {i} > /dev/null"): - continue - print(f"是否安装 {i}?[Y/N]") - if YesOrNo: - InstallSparkStore() - InstallWineSpark(i) - print("按回车键退出") - PressEnter() - exit() diff --git a/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py b/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py deleted file mode 100755 index 05a2f1d..0000000 --- a/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.1.0 -# 更新时间:2022年08月25日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import traceback -import req as requests -def exit(): - if __name__ == "__main__": - input("按回车键退出") - sys.exit() - sys.exit() -# 获取云列表 -sourcesList = [ - "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls", - "http://gfdgdxi.msns.cn/wine-runner-list/dlls" -] -url = sourcesList[0] -print("获取列表中……", end="") -try: - lists = json.loads(requests.get(f"{url}/list.json").text) -except: - print("\r列表获取失败!") - exit() -print("\r列表获取成功!") - -def GetUrlByNumber(dllID: int) -> str: - dllName = lists[dllID][0] - return f"{url}/{lists[int(dllID)][1]}/{lists[int(dllID)][2]}/{lists[int(dllID)][0]}" - -def GetNameByNumber(dllID: int) -> str: - return lists[dllID][0] - -def GetUrlByName(dllName: str): - for i in range(0, len(lists)): - if dllName == lists[i][0]: - return f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" - -def Download(wineBotton, dllName, urlPart, wine: str) -> bool: - try: - os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") - except: - pass - os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") - #print(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") - return os.system(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") - #return 0 - -def exit(): - input("按回车键退出") - sys.exit() - -if __name__ == "__main__": - if "--help" in sys.argv: - print("作者:gfdgd xi") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装指定应用") - sys.exit() - if len(sys.argv) <= 1 or sys.argv[1] == "": - print("您未指定需要安装的容器,无法继续") - print("参数:") - print("XXX 参数一") - print("参数一为需要安装的容器") - sys.exit() - print(''' - mmmm ""# ""# - # "m # # - # # # # - # # # # - #mmm" "mm "mm - - -''') - wineBotton = sys.argv[1] - wine = sys.argv[2] - if not os.path.exists(f"{wineBotton}/drive_c/windows/Fonts"): - input("您选择的不是 Wine 容器") - exit() - # 判断是不是 wine 容器 - if not os.path.exists(f"{wineBotton}/drive_c/windows/system32"): - print("这不是 Wine 容器") - exit() - # 获取用户希望安装的DLL - - while True: - print() - print("您可以输入DLL名称进行搜索,输入前面编号或DLL全称即可安装(推荐是编号,可以选系统版本)") - print("输入exit即可退出") - urlPart = "" - while True: - dllName = input(">") - if dllName.lower() == "exit": - exit() - if dllName in lists: - url = dllName - break - try: - dllName = lists[int(dllName)][0] - urlPart = GetUrlByNumber(int(dllName)) - f"{url}/{lists[int(dllName)][1]}/{lists[int(dllName)][2]}/{lists[int(dllName)][0]}" - break - except: - pass - right = False - for i in range(0, len(lists)): - if dllName == lists[i][0]: - right = True - urlPart = f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" - break - if dllName in lists[i][0]: - print(i, lists[i][0], f"平台:{lists[i][1]}", f"架构:{lists[i][2]}") - if right: - break - if os.path.exists(f"{wineBotton}/drive_c/windows/system32/{dllName}"): - if input(f"{dllName} 已存在,是否覆盖?(一般不推荐)[Y/N]").upper() == "N": - continue - try: - os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") - except: - print("文件移除失败!") - traceback.print_exc() - continue - # 下载 DLL - print(f"正在下载{dllName},请稍后") - print(f"下载链接:{urlPart}") - if Download(wineBotton, dllName, urlPart, wine): - print("下载失败!请重试") diff --git a/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-packager-en_US.qm b/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-packager-en_US.qm deleted file mode 100755 index e867c32..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-packager-en_US.qm and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-runner-en_US.qm b/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-runner-en_US.qm deleted file mode 100755 index 64ce5e4..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/LANG/deepin-wine-runner-en_US.qm and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/LANG/installwine-en_US.qm b/deb/opt/apps/deepin-wine-runner/LANG/installwine-en_US.qm deleted file mode 100755 index 8b60ace..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/LANG/installwine-en_US.qm and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/LANG/virtualmachine-en_US.qm b/deb/opt/apps/deepin-wine-runner/LANG/virtualmachine-en_US.qm deleted file mode 100755 index 90f5da1..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/LANG/virtualmachine-en_US.qm and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/LICENSE b/deb/opt/apps/deepin-wine-runner/LICENSE deleted file mode 100755 index 94a9ed0..0000000 --- a/deb/opt/apps/deepin-wine-runner/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/deb/opt/apps/deepin-wine-runner/Model/__init__.py b/deb/opt/apps/deepin-wine-runner/Model/__init__.py deleted file mode 100755 index eac623a..0000000 --- a/deb/opt/apps/deepin-wine-runner/Model/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import PyQt5.QtWidgets as QtWidgets -def OpenTerminal(command): - if terminalEnd[terminal][1]: - os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" \"{command}\"") - return - os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" {command}") -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -# 对终端的获取 -# 为什么 openkylin 只有 mate-terminal -# 优先为深度终端 -terminal = "" -terminalList = [ - "deepin-terminal", - "mate-terminal", - "gnome-terminal", - "xfce4-terminal" -] -terminalEnd = { - f"{programPath}/../launch.sh\" \"deepin-terminal": ["-e", 0], - "mate-terminal": ["-e", 1], - "gnome-terminal": ["--", 0], - "xfce4-terminal": ["-e", 1] -} -for i in terminalList: - if not os.system(f"which {i}"): - if i == "deepin-terminal": - i = f"{programPath}/../launch.sh\" \"deepin-terminal" - terminal = i - break -if terminal == "": - print("无法识别到以下的任意一个终端") - print(" ".join(terminalList)) - app = QtWidgets.QApplication(sys.argv) - QtWidgets.QMessageBox.critical(None, "错误", "无法识别到以下的任意一个终端\n" + " ".join(terminalList)) - exit() diff --git a/deb/opt/apps/deepin-wine-runner/Mount.sh b/deb/opt/apps/deepin-wine-runner/Mount.sh deleted file mode 100755 index bad9b4b..0000000 --- a/deb/opt/apps/deepin-wine-runner/Mount.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -if [ ` whoami ` != "root" ]; then - echo "Only root can run me" - exit 1 -fi -if [ ! -d "$1" ]; then - echo "路径不存在!" - exit 1 -fi -programPath=`dirname $0` -echo $0 -echo $1 -echo $2 -echo $3 -# 挂载必备目录 -cd "$1" -# 拷贝 Qemu Static -cp -r /usr/bin/qemu-*-static ./usr/bin -# 挂载目录 -# 此部分将会由 pardus-chroot 来处理 -#mount --bind /dev ./dev -#mount --bind /dev/pts ./dev/pts -#mount -t proc /proc ./proc -#mount --bind /etc/resolv.conf ./etc/resolv.conf -#mount -t sysfs /sys ./sys -#mount --bind /dev/shm ./dev/shm -chmod 777 -R root tmp -xhost + -# 挂载 Wine 运行器目录 -mount -o bind `dirname $0` ./opt/apps/deepin-wine-runner/ -# 挂载字体 -mount -o bind /usr/share/fonts ./usr/share/fonts -# 配置用户 -if [ ! -d "home/$2" ]; then - # 新建用户,且密码为 123456,以便读写 - "$programPath/pardus-chroot" . bash /opt/apps/deepin-wine-runner/ChangePassword.sh "$2" - mkdir -p "home/$2" - chmod 777 -Rv "home/$2" -fi -# 挂载用户目录到 /root(默认 $HOME 路径) -if [[ $2 == "root" ]]; then - mount --bind root "$1/root/" -else - mount --bind "/home/$2" "$1/home/$2" -fi -# 挂载此内容以可以跨架构运行程序 -mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc -systemctl restart binfmt-support.service -# 判断是否有 Root 权限 -cat etc/sudoers | grep "$2" -if [[ $? != 0 ]]; then - echo "$2 ALL=(ALL:ALL) ALL" >> etc/sudoers -fi -# 写入 DNS -cat /etc/resolv.conf > etc/resolv.conf -# 如果参数 3 存在 -"$programPath/pardus-chroot" . #env "HOME=/home/$2" ${@:3} -chroot "--userspec=$2:$2" . env "HOME=/home/$2" ${@:3} diff --git a/deb/opt/apps/deepin-wine-runner/MountWithoutHome.sh b/deb/opt/apps/deepin-wine-runner/MountWithoutHome.sh deleted file mode 100755 index 26947b5..0000000 --- a/deb/opt/apps/deepin-wine-runner/MountWithoutHome.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -if [ ` whoami ` != "root" ]; then - echo "Only root can run me" - exit 1 -fi -if [ ! -d "$1" ]; then - echo "路径不存在!" - exit 1 -fi -programPath=`dirname $0` -echo $0 -echo $1 -echo $2 -echo $3 -# 挂载必备目录 -cd "$1" -# 拷贝 Qemu Static -cp -r /usr/bin/qemu-*-static ./usr/bin -# 挂载目录 -# 这里将由 pardus-chroot 处理 -#mount --bind /dev ./dev -#mount --bind /dev/pts ./dev/pts -#mount -t proc /proc ./proc -#mount --bind /etc/resolv.conf ./etc/resolv.conf -#mount -t sysfs /sys ./sys -#mount --bind /dev/shm ./dev/shm -chmod 777 -R root tmp -xhost + -# 挂载此内容以可以跨架构运行程序 -mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc -systemctl restart binfmt-support.service -# 如果参数 3 存在 -"$programPath/pardus-chroot" . ${@:3} diff --git a/deb/opt/apps/deepin-wine-runner/ProgramFen.py b/deb/opt/apps/deepin-wine-runner/ProgramFen.py deleted file mode 100644 index fb1a398..0000000 --- a/deb/opt/apps/deepin-wine-runner/ProgramFen.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import base64 -import traceback -import updatekiller -import req as requests -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets - -class ProgramRunStatusShow(): - msgWindow = None - def ShowWindow(): - try: - fenlists = [] - for i in range(6): - fenlists.append(int(requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Zlbi9GZW4=").decode("utf-8") + f"{i}.txt").text)) - tipsInfo = "" - except: - traceback.print_exc() - fenlists = [0, 0, 0, 0, 0] - tipsInfo = "暂时无人提交此脚本运行情况,是否立即提交?" - - maxHead = fenlists.index(max(fenlists)) - allNumber = 0 - for i in fenlists: - allNumber += i - try: - tipsInfo = "" - for i in range(len(fenlists)): - tipsInfo += f"有 {fenlists[i] / allNumber * 100}% 的用户选择了 {i} 分({fenlists[i]}/{allNumber})\n" - maxNumber = max(fenlists) / allNumber * 100 - #if tipsInfo == "": - # tipsInfo = f"有{maxNumber}%的用户选择了这个评分" - except: - pass - ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - starLayout = QtWidgets.QHBoxLayout() - uploadButton = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "点此上传运行情况")) - uploadButton.clicked.connect(ProgramRunStatusUpload.ShowWindow) - msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0) - msgWidgetLayout.addLayout(starLayout, 0, 1) - msgWidgetLayout.addWidget(QtWidgets.QLabel(tipsInfo), 1, 0, 1, 2) - msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2) - end = 5 - if maxHead > 5: - for i in range(end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - else: - for i in range(maxHead): - starLayout.addWidget(QtWidgets.QLabel(f"")) - head = maxHead - for i in range(head, end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusShow.msgWindow.setWindowTitle(f"程序运行情况") - ProgramRunStatusShow.msgWindow.show() - -class ProgramRunStatusUpload(): - msgWindow = None - starLayout = None - fen = None - starList = [] - sha1Value = "" - programName = None - def ChangeStar(): - if ProgramRunStatusUpload.fen.currentIndex() > 5: - for i in ProgramRunStatusUpload.starList: - i.setText(f"") - return - for i in range(ProgramRunStatusUpload.fen.currentIndex()): - ProgramRunStatusUpload.starList[i].setText(f"") - head = ProgramRunStatusUpload.fen.currentIndex() - end = len(ProgramRunStatusUpload.starList) - for i in range(head, end): - ProgramRunStatusUpload.starList[i].setText(f"") - - def ShowWindow(): - ProgramRunStatusUpload.starList = [] - ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow(ProgramRunStatusShow.msgWindow) - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - ProgramRunStatusUpload.fen = QtWidgets.QComboBox() - ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout() - upload = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "上传")) - upload.clicked.connect(ProgramRunStatusUpload.Upload) - # 生成星星列表 - for i in [1, 1, 1, 1, 1]: - ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"")) - ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1]) - ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) - ProgramRunStatusUpload.fen.addItems(["0分", "1分", "2分", "3分", "4分", "5分"]) - ProgramRunStatusUpload.fen.setCurrentIndex(5) - ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar) - msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "评分:")), 1, 0) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1) - msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1) - msgWidgetLayout.addWidget(upload, 3, 1) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusUpload.msgWindow.setWindowTitle(QtCore.QCoreApplication.translate("U", "上传程序运行情况")) - ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusUpload.msgWindow.show() - - def Upload(): - try: - QtWidgets.QMessageBox.information(ProgramRunStatusUpload.msgWindow, QtCore.QCoreApplication.translate("U", "提示"), requests.get(f"http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=Fen{ProgramRunStatusUpload.fen.currentIndex()}").json()["Error"]) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(ProgramRunStatusUpload.msgWindow, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "数据上传失败!")) - -if __name__ == "__main__": - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - iconPath = "{}/deepin-wine-runner.svg".format(programPath) - app = QtWidgets.QApplication(sys.argv) - ProgramRunStatusShow.ShowWindow() - app.exec_() diff --git a/deb/opt/apps/deepin-wine-runner/QemuDownload.py b/deb/opt/apps/deepin-wine-runner/QemuDownload.py deleted file mode 100755 index e98232f..0000000 --- a/deb/opt/apps/deepin-wine-runner/QemuDownload.py +++ /dev/null @@ -1,439 +0,0 @@ -#!/usr/bin/env python3 -# 本来是用C++写的,但在非deepin/UOS编译/运行就是下载不了https文件,只能用python重写 -######################################################################### -# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布 -# 版本:2.4.0 -# 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 PyQt5 构建 -######################################################################### -################# -# 引入所需的库 -################# -import os -import shutil -import random -import sys -import updatekiller -import json -import traceback -import requests -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/../") -from Model import * -from trans import * -from PyQt5 import QtCore, QtGui, QtWidgets -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -# UI 布局(自动生成) -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(693, 404) - if not get_now_lang() == "zh_CN.UTF-8": - transla = Trans("en_US", f"{programPath}/trans/deepin-wine-runner-qemu-download.json") - else: - transla = Trans("zh_CN") - _translate = transla.transe - self.centralWidget = QtWidgets.QWidget(MainWindow) - self.centralWidget.setObjectName("centralWidget") - self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralWidget) - self.verticalLayout_2.setContentsMargins(11, 11, 11, 11) - self.verticalLayout_2.setSpacing(6) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setSpacing(6) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.localWineList = QtWidgets.QListView(self.centralWidget) - self.localWineList.setObjectName("localWineList") - self.horizontalLayout_2.addWidget(self.localWineList) - self.verticalLayout = QtWidgets.QVBoxLayout() - self.verticalLayout.setSpacing(6) - self.verticalLayout.setObjectName("verticalLayout") - self.verticalLayout_2.addWidget(QtWidgets.QLabel(_translate("U", """使用前须知: -1、Qemu 跨架构效率较低,如果有条件建议优先使用 box86、exagear 等效率较高的转换层; -2、使用此方案需要使用到 Root 权限(需开启管理员模式)并安装 qemu-user-static; -3、chroot 时候可能会出现问题导致程序闪退或异常,出现该问题重启电脑即可; -4、在此环境使用 Wine 时,只能读取到您用户目录或本程序文件夹下的文件,其它路径无法读取; -5、移除容器时请保证在这次打开电脑时没有调用过需要删除容器,如果有调用过建议重启电脑后再移除; -6、暂时属于测试功能;"""))) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout.addItem(spacerItem) - self.addButton = QtWidgets.QPushButton(self.centralWidget) - self.addButton.setObjectName("addButton") - self.verticalLayout.addWidget(self.addButton) - self.delButton = QtWidgets.QPushButton(self.centralWidget) - self.delButton.setObjectName("delButton") - self.verticalLayout.addWidget(self.delButton) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout.addItem(spacerItem1) - self.horizontalLayout_2.addLayout(self.verticalLayout) - self.internetWineList = QtWidgets.QListView(self.centralWidget) - self.internetWineList.setObjectName("internetWineList") - self.horizontalLayout_2.addWidget(self.internetWineList) - self.verticalLayout_2.addLayout(self.horizontalLayout_2) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setSpacing(6) - self.horizontalLayout.setObjectName("horizontalLayout") - #self.unzip = QtWidgets.QCheckBox(self.centralWidget) - #self.unzip.setObjectName("unzip") - #self.horizontalLayout.addWidget(self.unzip) - #self.deleteZip = QtWidgets.QCheckBox(self.centralWidget) - #self.deleteZip.setChecked(True) - #self.deleteZip.setTristate(False) - #self.deleteZip.setObjectName("deleteZip") - #self.horizontalLayout.addWidget(self.deleteZip) - #self.addOtherWine = QtWidgets.QPushButton(self.centralWidget) - #self.horizontalLayout.addWidget(self.addOtherWine) - spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem2) - self.verticalLayout_2.addLayout(self.horizontalLayout) - MainWindow.setCentralWidget(self.centralWidget) - # 菜单栏 - #_translate = QtCore.QCoreApplication.translate - - self.menu = MainWindow.menuBar() - self.changeSources = self.menu.addMenu(_translate("MainWindow", "更换源")) - self.gitlinkAction = QtWidgets.QAction(_translate("MainWindow", "Gitlink 源(推荐)")) - self.ipv6Action = QtWidgets.QAction(_translate("MainWindow", "备用源(只支持 IPv6 用户)")) - self.localAction = QtWidgets.QAction(_translate("MainWindow", "本地测试源(127.0.0.1)")) - self.changeSources.addAction(self.gitlinkAction) - self.changeSources.addAction(self.ipv6Action) - self.changeSources.addAction(self.localAction) - for i in [self.gitlinkAction, self.ipv6Action, self.localAction]: - i.setCheckable(True) - self.gitlinkAction.setChecked(True) - self.changeSourcesGroup = QtWidgets.QActionGroup(MainWindow) - self.changeSourcesGroup.addAction(self.gitlinkAction) - self.changeSourcesGroup.addAction(self.ipv6Action) - self.changeSourcesGroup.addAction(self.localAction) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "下载 Qemu 镜像")) - self.addButton.setText(_translate("MainWindow", "<<")) - self.delButton.setText(_translate("MainWindow", ">>")) - #self.unzip.setText(_translate("MainWindow", "不解压Wine资源文件")) - #self.deleteZip.setText(_translate("MainWindow", "删除下载的资源包,只解压保留(两个选项都选相互抵消)")) - #self.addOtherWine.setText(_translate("MainWindow", "导入自己的Wine")) - -def ReadLocalInformation(): - try: - global localJsonList - file = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "r") - localJsonList = json.loads(file.read()) - nmodel = QtGui.QStandardItemModel(window) - for i in localJsonList: - item = QtGui.QStandardItem(i) - nmodel.appendRow(item) - ui.localWineList.setModel(nmodel) - file.close() - except: - print("新建空列表") - try: - with open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "w") as file: - file.write("[]") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - -def InstallOtherWine(): - path = QtWidgets.QFileDialog.getOpenFileName(window, "选择 Wine", os.getenv("~"), "wine(wine);;wine64(wine64);;全部文件(*.*)") - if path[0] == "" or not path[1]: - return - try: - # 写入配置文件 - rfile = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/winelist.json", "r") - list = json.loads(rfile.read()) - rfile.close() - # 创建映射 - name = os.path.basename(os.path.dirname(os.path.dirname(path[0]))) - if name == "" or name == None: - name = f"useradd-wine-{random.randint(0, 99999)}" - #binPath = os.path.dirname(os.path.dirname(path[0])) - os.makedirs(f"{programPath}/{name}/bin") - if os.system(f"ln -s '{path[0]}' '{programPath}/{name}/bin/wine'") != 0: - QtWidgets.QMessageBox.critical(window, "新建wine映射失败") - # C++ 版注释:不直接用 readwrite 是因为不能覆盖写入 - file = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "w") - list.append(name) - file.write(json.dumps(list)) - file.close() - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - ReadLocalInformation() - -def ChangeSources(): - global urlSources - global internetWineSource - sources = [ui.gitlinkAction, ui.ipv6Action, ui.localAction] - for i in range(0, len(sources)): - if sources[i].isChecked(): - urlSources = internetWineSourceList[i] - internetWineSource = internetWineSourceList[i] - # 读取信息 - ReadLocalInformation() - ReadInternetInformation() - break - print(urlSources) - -# 下面内容均翻译自 C++ 版本 -def ReadInternetInformation(): - global internetJsonList - # C++ 版本是用 curl 的,考虑到 Python 用 requests 反而方便,于是不用 curl - try: - internetJsonList = json.loads(requests.get(f"{internetWineSource}/lists.json").text) - internetJsonListNew = [] - for k in internetJsonList: - archList = json.loads(requests.get(f"{internetWineSource}/{k}/lists.json").text) - for e in archList: - internetJsonListNew.append([e[0], e[1], k]) - internetJsonList = internetJsonListNew - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", "无法连接服务器!") - return - print(internetJsonList) - nmodel = QtGui.QStandardItemModel(window) - for i in internetJsonList: - item = QtGui.QStandardItem(i[0]) - nmodel.appendRow(item) - ui.internetWineList.setModel(nmodel) - -class DownloadThread(QtCore.QThread): - MessageBoxInfo = QtCore.pyqtSignal(str) - MessageBoxError = QtCore.pyqtSignal(str) - ChangeDialog = QtCore.pyqtSignal(QtWidgets.QProgressDialog, int, int, int) - Finish = QtCore.pyqtSignal() - def __init__(self, progressDialog: QtWidgets.QProgressDialog, - url: str, savePath: str, fileName: str, view: QtWidgets.QListView, deleteZip: bool, - unzip: bool, localList) -> None: - self.dialog = progressDialog - self.fileUrl = url - self.fileSavePath = savePath - self.fileSaveName = fileName - self.localView = view - self.downloadDeleteZip = deleteZip - self.downloadUnzip = unzip - self.localJsonList = localList - super().__init__() - - def ReadLocalInformation(self): - global localJsonList - try: - file = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "r") - nmodel = QtGui.QStandardItemModel() - localJsonList = json.loads(file.read()) - for i in localJsonList: - nmodel.appendRow(QtGui.QStandardItem(i)) - self.localView.setModel(nmodel) - file.close() - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - - def run(self): - try: - # 创建文件夹 - dir = QtCore.QDir() - #savePath = f"{programPath}/{self.fileSaveName}" - choose = ui.internetWineList.currentIndex().row() - arch = internetJsonList[choose][2] - savePath = f"{homePath}/.deepin-wine-runner-ubuntu-images/{arch}/{self.fileSaveName}" - if not os.path.exists(os.path.dirname(savePath)): - os.makedirs(os.path.dirname(savePath)) - # 文件下载 - timeout = 0 - f = requests.get(self.fileUrl, stream=True) - allSize = int(f.headers["content-length"]) # 文件总大小 - bytesRead = 0 - with open(savePath, "wb") as filePart: - for chunk in f.iter_content(chunk_size=1024): - if chunk: - #progressbar.update(int(part / show)) - filePart.write(chunk) - bytesRead += 1024 - self.ChangeDialog.emit(self.dialog, int(bytesRead / allSize * 100), int(bytesRead / 1024 / 1024), int(allSize / 1024 / 1024)) - self.ChangeDialog.emit(self.dialog, 100, 100, 100) - # 写入配置文件 - rfile = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "r") - list = json.loads(rfile.read()) - rfile.close() - # C++ 版注释:不直接用 readwrite 是因为不能覆盖写入 - file = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "w") - list.append(self.fileSaveName.replace(".tar.gz", "")) - file.write(json.dumps(list)) - file.close() - # 读取配置文件 - self.ReadLocalInformation() - self.localJsonList = list - # 解压文件 - shellCommand = "" - path = f"{homePath}/.deepin-wine-runner-ubuntu-images/{arch}/{self.fileSaveName.replace('.tar.gz', '')}/" - #path = f"{programPath}/{self.fileSaveName.replace('.7z', '')}" - shellCommand += f"""#!/bin/bash -mkdir -p \"{path}\" -tar -xvf \"{savePath}\" -C \"{path}\" -rm \"{savePath}\" -""" - #if self.downloadDeleteZip: - # shellCommand += f"rm -rf \"{savePath}\"\n" - shellFile = open("/tmp/depein-wine-runner-wine-install.sh", "w") - shellFile.write(shellCommand) - shellFile.close() - process = QtCore.QProcess() - command = ["deepin-terminal", "-e", "bash", "/tmp/depein-wine-runner-wine-install.sh"] - process.start(f"{programPath}/../launch.sh", command) - process.waitForFinished() - OpenTerminal("bash /tmp/depein-wine-runner-wine-install.sh") - self.Finish.emit() - except: - traceback.print_exc() - self.MessageBoxError.emit(traceback.format_exc()) - -def MessageBoxInfo(info): - QtWidgets.QMessageBox.information(window, "提示", info) - -def MessageBoxError(info): - QtWidgets.QMessageBox.critical(window, "错误", info) - -def ChangeDialog(dialog: QtWidgets.QProgressDialog, value, downloadBytes, totalBytes): - dialog.setValue(value) - dialog.setLabelText(f"{downloadBytes}MB/{totalBytes}MB") - -def DownloadFinish(): - ui.centralWidget.setEnabled(True) - -class QT: - thread = None - -def on_addButton_clicked(): - choose = ui.internetWineList.currentIndex().row() - if choose < 0: - QtWidgets.QMessageBox.information(window, "提示", "您未选中任何项,无法继续") - return - downloadName = internetJsonList[choose][1] - ReadLocalInformation() - for i in localJsonList: - if i.replace(".tar.gz", "") == internetJsonList[choose][0]: - QtWidgets.QMessageBox.information(window, "提示", "您已经安装了这个镜像了!无需重复安装!") - return - #if(ui.deleteZip.isChecked() + ui.unzip.isChecked() == 2): - # ui.deleteZip.setChecked(False) - # ui.unzip.setChecked(False) - arch = internetJsonList[choose][2] - downloadUrl = f"{internetWineSource}/{arch}/{downloadName}" - dialog = QtWidgets.QProgressDialog() - cancel = QtWidgets.QPushButton("取消") - cancel.setDisabled(True) - dialog.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) - dialog.setCancelButton(cancel) - dialog.setWindowTitle(f"正在下载“{internetJsonList[choose][0]}”") - QT.thread = DownloadThread( - dialog, - downloadUrl, - "", - internetJsonList[choose][1], - ui.localWineList, - False, - not True, - localJsonList - ) - QT.thread.MessageBoxInfo.connect(MessageBoxInfo) - QT.thread.MessageBoxError.connect(MessageBoxError) - QT.thread.ChangeDialog.connect(ChangeDialog) - QT.thread.Finish.connect(DownloadFinish) - ui.centralWidget.setDisabled(True) - QT.thread.start() - -def on_delButton_clicked(): - if os.path.exists("/tmp/deepin-wine-runner-qemu-lock"): - QtWidgets.QMessageBox.question(window, "提示", "检测到您的电脑已经运行了 Qemu/Chroot 容器,请重启后再移除") - return - if QtWidgets.QMessageBox.question(window, "提示", "你确定要删除吗?") == QtWidgets.QMessageBox.No: - return - if ui.localWineList.currentIndex().row() < 0: - QtWidgets.QMessageBox.information(window, "提示", "您未选择任何项") - return - try: - # {localJsonList[ui.localWineList.currentIndex().row()]} - path = f"{homePath}/.deepin-wine-runner-ubuntu-images/" - changed = False - for i in os.listdir(path): - if os.path.exists(f"{path}/{i}/{localJsonList[ui.localWineList.currentIndex().row()]}"): - changed = True - name = f"{path}/{i}/{localJsonList[ui.localWineList.currentIndex().row()]}".replace(".tar.gz", "") - if not changed: - name = f"{path}/i386/{localJsonList[ui.localWineList.currentIndex().row()]}".replace(".tar.gz", "") - print(name) - # 必须取消挂载目录才行 - os.system(f"bash '{programPath}/UnMount.sh' '{name}'") - #name = f"{homePath}/.deepin-wine-runner-ubuntu-images/{localJsonList[ui.localWineList.currentIndex().row()]}" - dir = QtCore.QDir(name) - dir.removeRecursively() - QtCore.QFile.remove(name + ".tar.gz") - del localJsonList[ui.localWineList.currentIndex().row()] - file = open(f"{homePath}/.deepin-wine-runner-ubuntu-images/lists.json", "w") - file.write(json.dumps(localJsonList)) - file.close() - ReadLocalInformation() - QtWidgets.QMessageBox.information(window, "提示", "删除成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - -# 获取当前语言 -def get_now_lang()->"获取当前语言": - return os.getenv('LANG') - -if __name__ == "__main__": - homePath = os.getenv("HOME") - localJsonList = [] - internetJsonList = [] - internetWineSourceList = [ - "https://code.gitlink.org.cn/gfdgd_xi/deepin-wine-runner-ubuntu-image/raw/branch/master/Sandbox", - "http://gfdgdxi.msns.cn/deepin-wine-runner-ubuntu-image/Sandbox", # 备用源,纯 IPv6 源 - "http://127.0.0.1/deepin-wine-runner-ubuntu-image/Sandbox/" # 本地测试源 - ] - internetWineSource = internetWineSourceList[0] - app = QtWidgets.QApplication(sys.argv) - if os.system("which qemu-i386-static"): - if QtWidgets.QMessageBox.question(None, "提示", "检测到您未安装 qemu-user-static,是否安装?") == QtWidgets.QMessageBox.Yes: - OpenTerminal(f"pkexec bash '{programPath}/ShellList/InstallQemuUserStatic.sh'") - exit() - try: - if not os.path.exists(f"{homePath}/.deepin-wine-runner-ubuntu-images/"): - os.makedirs(f"{homePath}/.deepin-wine-runner-ubuntu-images/") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(None, "错误", traceback.format_exc()) - exit() - # 读取翻译 - if not get_now_lang() == "zh_CN.UTF-8": - trans = QtCore.QTranslator() - trans.load(f"{programPath}/../LANG/installwine-en_US.qm") - app.installTranslator(trans) - # 窗口构建 - window = QtWidgets.QMainWindow() - ui = Ui_MainWindow() - window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) - ui.setupUi(window) - window.show() - # 连接信号 - ui.addButton.clicked.connect(on_addButton_clicked) - ui.delButton.clicked.connect(on_delButton_clicked) - #ui.addOtherWine.clicked.connect(InstallOtherWine) - ui.changeSourcesGroup.triggered.connect(ChangeSources) - ## 加载内容 - # 设置列表双击不会编辑 - ui.localWineList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) - ui.internetWineList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) - # 读取信息 - ReadLocalInformation() - ReadInternetInformation() - # 图标 - ui.centralWidget.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg")) - - app.exec_() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/QemuRun.py b/deb/opt/apps/deepin-wine-runner/QemuRun.py deleted file mode 100755 index 9a329d8..0000000 --- a/deb/opt/apps/deepin-wine-runner/QemuRun.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import getpass -import updatekiller -import PyQt5.QtWidgets as QtWidgets - -if __name__ == "__main__": - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - homePath = os.getenv("HOME") - if len(sys.argv) <= 1: - print("参数不足") - sys.exit(1) - app = QtWidgets.QApplication(sys.argv) - # 判断是否已下载镜像 - if not os.path.exists(f"{homePath}/.deepin-wine-runner-ubuntu-images/{sys.argv[1]}"): - QtWidgets.QMessageBox.information(None, "提示", "此镜像未下载解压,无法继续") - exit() - commandList = "" - userName = getpass.getuser() - for i in sys.argv[3:]: - commandList += f"'{i}' " - if commandList.replace(" ", "") == "": - commandList = "bash" - # 需要先取消挂载其它目录以防止冲突 - path = f"{homePath}/.deepin-wine-runner-ubuntu-images" - for i in os.listdir(path): - archPath = f"{path}/{i}" - if os.path.isdir(archPath): - for k in os.listdir(archPath): - bottlePath = f"{archPath}/{k}" - if os.path.isdir(bottlePath): - if f"{i}/{k}" == sys.argv[1]: - continue - if os.path.ismount(f"{bottlePath}/dev"): - os.system(f"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY bash '{programPath}/UnMount.sh' '{bottlePath}' ") - os.system("touch /tmp/deepin-wine-runner-qemu-lock") - # 判断是否挂载 - if not os.path.ismount(f"{homePath}/.deepin-wine-runner-ubuntu-images/{sys.argv[1]}/dev"): - print("文件暂未挂载,开始挂载") - if int(sys.argv[2]): - sys.exit(os.system(f"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY bash '{programPath}/MountWithoutHome.sh' '{homePath}/.deepin-wine-runner-ubuntu-images/{sys.argv[1]}' '{userName}' {commandList}")) - else: - sys.exit(os.system(f"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY bash '{programPath}/Mount.sh' '{homePath}/.deepin-wine-runner-ubuntu-images/{sys.argv[1]}' '{userName}' {commandList}")) - sys.exit(os.system(f"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY chroot '--userspec={userName}:{userName}' '{homePath}/.deepin-wine-runner-ubuntu-images/{sys.argv[1]}/' env 'HOME=/home/{userName}' {commandList}")) diff --git a/deb/opt/apps/deepin-wine-runner/QemuSystemInstall.sh b/deb/opt/apps/deepin-wine-runner/QemuSystemInstall.sh deleted file mode 100755 index 0426c48..0000000 --- a/deb/opt/apps/deepin-wine-runner/QemuSystemInstall.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -pkexec apt install qemu-system -y -echo 安装完成!按回车键退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/History.txt b/deb/opt/apps/deepin-wine-runner/RegShot/History.txt deleted file mode 100644 index a6e92fe..0000000 --- a/deb/opt/apps/deepin-wine-runner/RegShot/History.txt +++ /dev/null @@ -1,244 +0,0 @@ - -History of Regshot - -Download latest version at: -http://sourceforge.net/projects/regshot/ - -------------------------------------------------- -*: Note you may interest -!: Changes made -+: Function added --: Function deleted -------------------------------------------------- - -V1.9.0 2013-02-02 -! Testing purpose only (there may be some bugs left in it due to Unicode and x64 changes) -+ Add 64-Bit builds -+ Add Unicode builds with .hivu files (not compatible with ANSI .hiv files) -+ Structure of hive files enhanced, while keeping backwards compatibility for ANSI builds -+ Skip list checks now also against the single key/value/file name additionally to checking the complete path -+ Add a proper manifest file to enable UAC elevation -+ Symbol files released for all builds -! Add support for various compilers -! Various code cleanups -* New program icon (thanks to the PortableApps guys) -* All Regshot versions can be build via WDK - -V1.8.2 2007-11-03 -! Change some calls to ANSI version (lstrcmp->strcmp...) -! Use risk . and .. compare -! Use HeapAlloc instead of GlobalAlloc, danger but slightly faster, see source code -! Html differ color from e0e0e0 to e0f0e0 [Thanks Charles!] -+ Add French language fixed, Kazakh language. -+ Add new style browse for folder by Belogorokhov Youri! (NT+) -+ Do not save setting to regshot.ini when there is no such ini file - (idea from "alan borer" in my msg board) -+ Fix crash bug in former version if start from cmd window -! Minor changes and minor bug fixed - -V1.8.1 2007-06-20 -! Fix a Crash bug in 1.8.0! (LoadHive()->ReadFile()) -+ Dir chains comparison is more human. -+ "UseLongRegHead" option added in regshot.ini to compatible with undoReg (1.46) -* "UseLongRegHead=1" means using "HKEY_LOCAL_MACHINE" instead of "HKLM", default 0 -* Do not compare shots saved with different "UseLongRegHead" option! - -V1.8.0 2007-06-15 (Its TiANWEi reloaded) -! Fix file chain break bug in 1.7 -! Fix several pointer mis-point (lpComputer, etc) -! Code maintenance (split, rename, OMG) -! File attribute dir code adjust -! Value mode section of html output is colored [Thanks HANDLE!] -+ Fileshots are now saved in hive (you must be waiting for this ^_^) -+ Use GPLv2 license - -V1.7, 1.7.1, and 1.7.2 2004-02-25 until 2004-03-05 This version is made by tulipfan[CCG]! -* Minimize file size from 44k to 28k, thanks to y0da -! When shot file, "."&".." not show -* Instead of using "rgst152.dat", the config moved to "regshot.ini" -+ Skip List function is added both for reg and file's shot -+ 1.7.1 add 2 languages -+ 1.7.2 fix language codepage bug thanks Bata Gyrgy! - -V1.61a,b,c,d,e,e+,e1-e5 2002-07-13 until 2003-01-01 -+ Add 2 languages[1 in 1.61b], Fixed 1. -! SeparatorBar misplaced in Popup menu in some OS, - Hope to fix it! [Thanks Dchenka] -! Fix Output path bug found by itschy! -+ Add Japanese language by Kentaro Okude! -+ Add Polish language by Adam Mikusiski! -+ Add Serbian language by Wiz from Yugoslavia!1.61e1 -+ Add Hebrew language by Jack Gorji! 1.61e1 -+ Add Galego language by Xos?Antn Vicente Rodrguez [e2] -+ Add Hrvatski language by Obelix[[e3] -+ Add Bulgarian language by Alex Simidchiev[e4] -+ Add Svenska language by joup@algonet.se[e5] - -V1.61 2002-03-30 -+ Clear shots separately -+ Show translators name in About Dialog -+ Add Nederlands, Trke, esky language support -! Optimize some codes - -V1.60[test] 2002-03-25 -+ Snapshots can be saved into "Hive" files - -V1.55 2002-03-11 -- Cut off "Dynamic Monitor" Function -+ Compare log file are saved with the name of the - comment you input! - -V1.54b 2002-02-28 -! Fix bug that "rgst152.dat" was misplaced. -+ Add Deutsch language support. - -V1.54a 2002-02-22 -! Fix bug that made in 1.54 [Cannot save mask in - Monitor window] -+ Minor changes, add Italian language strings. -* Some friends reported that Monitor Window may hang - up, but I have not encounter it myself, I will - debug later. - -V1.54 2002-01-27 -+ Multi Language interface and inner strings - -V1.53 2001-12-16 -+ Show progress during compare -! New counter refresh method -! URL change to regshot.yeah.net - -V1.52c 2001-12-10 -+ Browse button in static window - -V1.52b 2001-11-18 -+ Pause "||" added in dynamic window -+ Save function added in dynamic window - -V1.52a 2001-11-16 -+ Output-path in static window -+ Ring3TD name catch and filter in dynamic window - -V1.52 2001-11-10 -+ Dynamic monitor window under Win9x - read readme.txt for detail! -! rgst150a.dat -> rgst152.dat - -V1.51, 1.51a 2001-10-25 -! Fix crash bug in 1.50e when scan folders!! -+ Scan unlimited number of drivers [folders] - -V1.50e 2001-10-18 -+ Scan up to 26 drivers[folders] separated with ";" -- Text log don't wrap at too long data for the - 3rd party software analysis - -V1.50d 2001-09-29 -! Deal with more non-standard(invalid) reg values - -V1.50c 2001-09-28 -! Crash bug fixed when grab some non-standard value -* Thanks firstk@21cn.com for testing debug version! - -V1.50b 2001-09-22 -! NULL folder name minor bug fixed - -V1.50a 2001-09-10 -* Teachers Day! -+ Files and folders scan! [maybe whole partition!] -! log filename fixed -! regshot.dat -> rgst150.dat - -V1.40c 2001-09-05 -+ Comments field for compare log -! Due to HTML viewer's limit, some change made - -V1.40b 2001-09-04 -+ Show keys and values counts during registry grab -+ Show elapse time during registry grab -+ Refresh dialog box during registry grab -+ Show icon on sysmenu -! New string api -! Minor changes on memory allocation - -V1.40a 2001-09-01 -* This is a brand-new version! -! New data structure, more detailed output. -+ HTML document compare log output. -- Some checkbox. - -------------------------------------------------- - -Version 1.30c 2001-08-2? -! Getsystime -> Getlocaltime -! H.L.K -> H.M -! Little changes - -Version 1.30b 2001-08-13 -- Some ASM code -- Some exception handler -- Some old function -* Great Thanks to Mr.Zhangl!!! - -Debug Version 1.20b 2001-08-10 -* This is a debug version to Mr. ZhangL - -Debug Version 1.20a 2001-08-09 -* This is a debug version to Mr. ZhangL -! Pointers unclear bug fixed -! Dbytes bug fixed - -Debug Version 1.2 2001-08-08 -* This is a debug version to Mr. ZhangL -+ New debuglog output - -Debug Version 1.1 2001-08-07 -* This is a debug version to Mr. ZhangL -+ New debuglog "debug_keyqueryinfo.log" output - -Debug Version 1.0 2001-08-07 -* This is a debug version to Mr. ZhangL -* Four month apart from my cute Regshot! -+ debug_keyopen.log - debug_keyclose.log - debug_keyqueryinfo.log - debug_keycannotbeopen.log -* My PC has no Win2000 installed, so I email this - version to Zhangl, and he email me the logfile! - -Version 1.10 2001-04-09 -* One and a half year apart from my Regshot! -! Fixed bugs on NT4 - -Version 1.01j 1999-12-29 -- NT4 bug cannot be found?? So sad! -- Not packed with UPX any more - -Version 1.01i 1999-12-04 -+ Compare log save to different files, max 10000! -+ Turtor file (turtor.txt) added in release pack. -* Found bugs on NT, bug I cannot fix it - -Version 1.01h 1999-11-25 -! Found bugs on NT sp3 - -Version 1.01g 1999-10 -! Windows version detection error fixed. -+ Exterviewer edit box. - -Version 1.01f 1999-10 -! New method of compare -+ ASM codes -+ Notpad.exe called to show the log -+ New Icon. -- Bmp logo. - -Version 1.01e -* Mostly like 1.01d, bugs fixed. - -Version 1.01d -! Use direct "=" instead "lstrcat()", faster! -! Larger listBox - -Version before 1.01c -* I don't remember so much!:)) diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/License.txt b/deb/opt/apps/deepin-wine-runner/RegShot/License.txt deleted file mode 100644 index 3394995..0000000 --- a/deb/opt/apps/deepin-wine-runner/RegShot/License.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/ReadMe.txt b/deb/opt/apps/deepin-wine-runner/RegShot/ReadMe.txt deleted file mode 100644 index 1d9c78d..0000000 --- a/deb/opt/apps/deepin-wine-runner/RegShot/ReadMe.txt +++ /dev/null @@ -1,152 +0,0 @@ - -Readme file of Regshot 1.9.0 (2013-02-02) - ------------------ -Introduction: ------------------ -Regshot is a small, free and open-source registry compare utility that allows you to quickly -take a snapshot of your registry and then compare it with a second one - done after doing -system changes or installing a new software product. The changes report can be produced in -text or HTML format and contains a list of all modifications that have taken place between -the two snapshots. In addition, you can also specify folders (with subfolders) to be -scanned for changes as well. -(Most of above text was copied from webattack.com, thanks :) - - ------------------ -Usage: ------------------ -(1) Click the "1st shot" button -It pops up a menu which contains several items: - (A) "Shot", to take a snapshot only, and it will not be kept if you exit Regshot program; - (B) "Shot and save...", to take a snapshot of your registry and save the whole registry to - a "hive" file and you can keep it in your hard disk for future use; - (C) "Load...", to load a "hive" file previous saved. -If you want to monitor your file system, just check the "Scan Dir [dir..]" checkbox -and input the folder names below it. Note: Regshot has the ability to scan multiple -folders, just separate them with ";", Regshot will also scan the subfolders of the current -folders you entered. - -(2) Run any program that may change your windows registry or the file system - -(3) Click the "2nd shot" button - -(4) Select your output LOG file type, "text" or "HTML", default is "text" - -(5) Enter your comment for this action into the "comment field", e.g.: "Changes made after -winzip started". The comment will only be saved into the comparison log files not into "hive" files - -(6) Click the "Compare" button -Regshot will do the comparison job now (auto detect which shot is newer), when it is finished, -Regshot will automatically load the comparison log as you defined above, the log files are -saved in the directory where "Output path" is defined, default is your Windows Temp Path, -it was named as the "comment" you input, if the "comment field" is empty or invalid, the -log will be name as "~resxxxx.txt" or "~resxxxx.htm" where "xxxx" is 0000-9999. - -(7) Click the "Clear" button -The two snapshots (or separately) previous made will be cleared and you can begin a new job. -Note: "Clear" does not erase the log files! - -(8) To quit Regshot, just click the "Quit" button - -(9) You can change the language of the Regshot at main window, all words are saved in the -file "language.ini". View it for details! - -(10) New to 1.7: regshot.dat now changed to regshot.ini, skip dirs and skip registry keys -are included. The executable's size is smaller! - -(11) New to 1.8: -File shots are now saved in hive file. -"UseLongRegHead" option added in regshot.ini to compatible with undoReg (1.46) -"UseLongRegHead=1" means using "HKEY_LOCAL_MACHINE" instead of "HKLM", default 0 -Do not compare shots saved with different "UseLongRegHead" option! (limit gone in 1.9.0) - -(12) New to 1.9.0: -x64 and Unicode versions. -You can compare shots saved with different "UseLongRegHead" option. -Loading ANSI hive files in Unicode builds and vice versa is not supported. - - ------------------ -Thanks: ------------------ -Alexander Romanenko -- Former space provider! http://www.ist.md/ -Ivan -- Former space provider! http://www.digitalnuke.com/ -Toye -- Release! -zhangl -- Debug! -firstk -- Debug! -mssoft -- Test! -dreamtheater -- Test! -Gonzalo -- Spanish -ArLang -- Chinese -Mikhail A.Medvedev -- Russian[Thanks!] -Kenneth Aarseth -- Norsk -Marcel Drappier -- French -Vittorio "Capoccione" -- Italian -Gnatix -- Deutsch -Murat KASABOGLU -- Trke -Paul Lowagie -- Nederlands -ondra -- esky -AVE7 -- Fixed Deutsch! -Pau Bosch i Crespo -- Catalan -Michael Papadakis -- Greek -Per Bryldt -- Danish -Rajah -- Latvian -Leandro -- Portuguese -Roland Turcan -- Slovak -Kentaro Okude -- Japanese -Adam Mikusiski -- Polish -Computer Wizard[Wiz] -- Serbian -Jack Gorji -- Hebrew -Xos?Antn Vicente Rodrguez --Galego -Obelix -- Hrvatski -Alex Simidchiev -- Bulgarian -joup@algonet.se -- Svenska -Bata Gyrgy -- Hungarian -Dmitry P. -- Ukrainian -Mr Anonyme,Charles -- French Update -kazakh -- Erzhan Erbolatuly - -Nick Reid -- Advice -tongjiawang -- Many help! - -Franck Uberto, Patrick Whitted, Walter Bergner, Jim McMahon, Fred Bailey, -Dchenka, itschy, HANDLE and all those we forgot to mention!! - - ------------------ -LICENSE: ------------------ - -Copyright 2011-2013 The Regshot Team : TiANWEi, Maddes, XhmikosR -Copyright 1999-2003,2007,2011 TiANWEi -Copyright 2004 tulipfan -Copyright 2007 Belogorokhov Youri - -* License remark: -* TiANWEi - Original Author of Regshot, 1999-now -* Maddes http://www.maddes.net/ - Coder and Maintainer, 2011-now -* XhmikosR - Coder and Maintainer, 2011-now -* Tulipfan (tfx) was the Designer & Coder of "Skiplist functions, regshot.ini setup, REGSHOT_TITLE define", he made the release 1.7. -* Belogorokhov Youri (HANDLE) was the contributor of "a better html color idea, a new style browse dialog function" in 1.8. - -Multi-language translations are the property of their respective owner. - -Regshot is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Regshot is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Regshot; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - ------------------ -The Regshot Team: ------------------ -http://sourceforge.net/projects/regshot/ diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/Regshot-x64-Unicode.exe b/deb/opt/apps/deepin-wine-runner/RegShot/Regshot-x64-Unicode.exe deleted file mode 100644 index fba5992..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/RegShot/Regshot-x64-Unicode.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/language.ini b/deb/opt/apps/deepin-wine-runner/RegShot/language.ini deleted file mode 100644 index 6cfc6e3..0000000 --- a/deb/opt/apps/deepin-wine-runner/RegShot/language.ini +++ /dev/null @@ -1,1421 +0,0 @@ -[English] -1=Keys: -2=Values: -3=Dirs: -4=Files: -5=Time: -6=Keys added: -7=Keys deleted: -8=Values added: -9=Values deleted: -10=Values modified: -11=Files added: -12=Files deleted: -13=Files [attributes?] modified: -14=Folders added: -15=Folders deleted: -16=Folders attributes changed: -17=Total changes: -18=Comments: -19=Datetime: -20=Computer: -21=Username: -22=About -23=Error -24=Error call External Viewer! -25=Error creating file! -26=Error open file! -27=Error move file pointer! -28=&1st shot -29=&2nd shot -30=C&ompare -31=&Clear -32=&Quit -33=&About -34=&Monitor.. -35=Compare logs save as: -36=Output path: -37=Add comment into the log: -38=Plain &TXT -39=&HTML document -40=&Scan dir1[;dir2;dir3;...;dir nn]: -41=&Shot -42=Shot and Sa&ve... -43=Loa&d... -44=&Clear All -45=Clear &1st shot -46=Clear &2nd shot - -[Espaol] -Translator=[FESTL] Freelance English-Spanish Technical Localizations -1=Claves: -2=Valores: -3=Directorios: -4=Archivos: -5=Tiempo: -6=Claves aadidas: -7=Claves borradas: -8=Valores aadidos: -9=Valores borrados: -10=Valores modificados: -11=Archivos aadidos: -12=Archivos borrados: -13=Atributos de archivo modificados: -14=Carpetas aadidas: -15=Carpetas borradas: -16=Atributos de carpeta modificados: -17=Total de cambios: -18=Comentarios: -19=Fecha y hora: -20=Computador: -21=Usuario: -22=Sobre -23=Error -24=Error al llamar visor externo! -25=Error al crear archivo! -26=Error al abrir archivos! -27=Error al mover puntero de archivo! -28=&1er. Foto -29=&2da. Foto -30=C&omparar -31=&Limpiar -32=S&alir -33=&Sobre -34=&Monitor.. -35=Comparar logs guardados como: -36=Ruta de salida: -37=Aadir comentario al log: -38=&Texto -39=Documento &HTML -40=&Escanear dir1[;dir2;...;dir nn] -41=&Foto -42=Foto + &guardar... -43=&Cargar... -44=&Limpiar -45=Limpiar &1er. Foto -46=Limpiar &2da. Foto - -[Russian] -Translator=Mikhail A.Medvedev -1=: -2=: -3=: -4=: -5=: -6= : -7= : -8= : -9= : -10= : -11= : -12= : -13= []: -14= : -15= : -16= []: -17= : -18=: -19= : -20= : -21= : -22= -23= -24= ! -25= ! -26= ! -27=Error move file pointer! -28=&1 -29=&2 -30=& -31=& -32=& -33= & -34=&... -35= : -36= : -37= : -38=& -39=& HTML -40=& 1[;dir2;...;dir nn]: -41=& -42= + &... -43=&... -44=& -45= &1 -46= &2 - -[Franais] -Translator=Marcel Drappier - Charles Fitoussi -1=Cls : -2=Valeurs : -3=Dirs : -4=Fichiers : -5=Temps : -6=Cls ajoutes : -7=Cls effaces : -8=Valeurs ajoutes : -9=Valeurs effaces : -10=Valeurs modifies : -11=Fichiers ajouts : -12=Fichiers effacs : -13=Fichiers [attributs ?] modifis : -14=Dossiers ajouts : -15=Dossiers effacs : -16=Attributs de dossiers modifis : -17=Nombre de modifications : -18=Commentaires : -19=Dates & Heures : -20=Ordinateur : -21=Utilisateur : -22=A propos de RegShot -23=Erreur -24=Erreur d'appel du programme de visualisation externe ! -25=Erreur en crant le fichier ! -26=Erreur d'ouverture du fichier ! -27=Erreur de dplacement du pointeur de fichier ! -28=&1er clich -29=&2me clich -30=C&omparer -31=Effa&cer -32=&Quitter -33=&A propos... -34=&Moniteur... -35=Sauver les comparaisons comme : -36=Rpertoire de sauvegarde : -37=Commentaire additionnel : -38=Fichier &Txt -39=Document &Html -40=&Scan dir1[;dir2;...;dir n] : -41=&Clich -42=Clich + &Sauvegarde... -43=Char&ger... -44=Effa&cer tout -45=Effacer &1er clich -46=Effacer &2me clich - -[GB] -Translator=!!! -1=: -2=ֵ: -3=Ŀ¼: -4=ļ: -5=ʱ: -6=Ӽ: -7=ɾ: -8=ֵ: -9=ɾֵ: -10=޸ֵ: -11=ļ: -12=ļɾ: -13=ļ޸: -14=Ŀ¼: -15=Ŀ¼ɾ: -16=Ŀ¼޸: -17=ܼ: -18=Ҫע: -19=ʱ: -20=: -21=ʹ: -22= -23= -24=޷ⲿ! -25=޷ļ! -26=޷ļ! -27=޷ƶļָ! -28=ȡ[&1] -29=ȡ[&2] -30=Ƚ[&O] -31=[&C] -32=˳[&Q] -33=[&A] -34=[&M].. -35=Ƚϼ¼Ϊ: -36=·: -37=ڼ¼ļע: -38=&TXT ĵ -39=&HTML ĵ -40=ɨ[&S] dir1[;dir2;...dir nn]: -41=ȡ[&S] -42=ȡ浵[&V]... -43=ᵵ[&D]... -44=ȫ[&C] -45=ȡ1[&1] -46=ȡ2[&2] - -[Big5] -Translator=!!! -1=: -2=: -3=ؿ: -4=: -5=ɶ: -6=W[: -7=R: -8=W[: -9=R: -10=ק: -11=W[: -12=R: -13=ק: -14=ؿW[: -15=ؿR: -16=ؿݩʭק: -17=`p: -18=nI`: -19=ɶ: -20=pW: -21=ϥΪ̦W: -22=_ -23=~ -24=LkեΥ~su! -25=LkЫؤ! -26=Lk}! -27=Lkʤw! -28=[&1] -29=[&2] -30=[&O] -31=M[&C] -32=hX[&Q] -33=_[&A] -34=ʱ[&M].. -35=Ots: -36=X|: -37=bO󤺲K[`: -38=&TXT -39=&HTML -40=y[&S] dir1[;dir2;...dir nn]: -41=[&S] -42=}s[&V]... -43=[&D]... -44=M[&C] -45=M1[&1] -46=M2[&2] - -[Norsk] -Translator=Kenneth Aarseth -1=Nkler: -2=Verdier: -3=Mapper: -4=Filer: -5=Tid: -6=Nkler lagt til: -7=Slettede nkler: -8=Verdier lagt til: -9=Slettede verdier: -10=Forandrede verdier: -11=Fil lagt til: -12=Slettede filer: -13=Filer [engenskaper] forandret: -14=Mapper lagt til: -15=Mapper slettet: -16=Mappe egenskaper forandret: -17=Antall endringer: -18=Kommentarer: -19=Dato tid: -20=Maskin navn: -21=Brukernavn: -22=Om -23=Error -24=Error call External Viewer! -25=Error creating file! -26=Error open file! -27=Error move file pointer! -28=F&ste sk -29=A&ndre sk -30=&Sammenlign -31=&Tilbakestill -32=&Avslutt -33=&Om Regshot -34=Over&vk.. -35=Lagre logg som: -36=Logg fil plassering: -37=Legg til en kommentar: -38=&Ren tekst -39=&Web format -40=S?k mappe1[;mappe2;osv]: -41=&Sk -42=Sk and La&gre... -43=Loa&d... -44=&Tilbakestill -45=Tilbakestill F&ste sk -46=Tilbakestill A&ndre sk - -[Italiano] -Translator=Vittorio -1=Chiave: -2=Valore: -3=Dir: -4=File: -5=Tempo: -6=Chiave aggiunta: -7=Chiave cancellata: -8=Valore aggiunto: -9=Valore cancellato: -10=Valore modificato: -11=File aggiunto: -12=File cancellato: -13=File [attributi?] modificato: -14=Cartella aggiunta: -15=Cartella cancellata: -16=Attributi cambiati nella cartella: -17=Variazioni totali: -18=Commenti: -19=Dataora: -20=Computer: -21=Username: -22=About -23=Error -24=Error call External Viewer! -25=Error creating file! -26=Error open file! -27=Error move file pointer! -28=&1st shot -29=&2nd shot -30=C&onfronta -31=&Pulisci -32=&Esci -33=&Info -34=&Monitor.. -35=Confronta il log salvato come: -36=Directory di destinazione: -37=Aggiungi commenti nel log: -38=File &TXT -39=&Documento HTML -40=&Scan dir1[;dir2;...;dir nn]: -41=&Shot -42=Shot and Sa&lva... -43=Loa&d... -44=&Pulisci -45=Pulisci &1st shot -46=Pulisci &2nd shot - -[Deutsch] -Translator=Gnatix & AVE7 -1=Schlssel: -2=Werte: -3=Ordner: -4=Dateien: -5=Zeit: -6=Schlssel hinzugefgt: -7=Schlssel gelscht: -8=Werte hinzugefgt: -9=Werte gelscht: -10=Werte gendert: -11=Dateien hinzugefgt: -12=Dateien gelscht: -13=Dateien [Attribute?] gendert: -14=Ordner hinzugefgt: -15=Ordner gelscht: -16=Ordnerattribute gendert: -17=Gesamte nderungen: -18=Kommentar: -19=Datum und Zeit: -20=Computer: -21=Benutzername: -22=ber -23=Fehler -24=Fehler beim Starten von externem Viewer! -25=Fehler beim Erstellen von Datei! -26=Fehler beim ffnen von Dateien! -27=Fehler beim Verschieben von Dateizeiger! -28=&1. Schu -29=&2. Schu -30=&Vergleichen -31=&Leeren -32=&Beenden -33=be&r -34=ber&wachen.. -35=Speichern Vergleichslogdatei als: -36=Ausgabepfad: -37=Kommentar in Logdatei hinzufgen: -38=&TXT Datei -39=&HTML Datei -40=&Scannen dir1[;dir2;...;dir nn]: -41=&Schu -42=Schu + Spei&chern... -43=La&den... -44=Alle &Leeren -45=Leeren &1. Schu -46=Leeren &2. Schu - -[Trke] -Translator=Murat KASABOGLU -1=Anahtar: -2=Deerler: -3=Klasrler: -4=Dosyalar: -5=Sre: -6=Anahtarlar eklenmi? -7=Anahtarlar silinmi? -8=Deerler eklenmi? -9=Deerler silinmi? -10=Deerler deitirilmi? -11=Dosyalar?eklenmi? -12=Dosyalar?silinmi? -13=Dosyalarn zellikleri deitirilmi? -14=Klasrler eklenmi? -15=Klasrler silinmi? -16=Klasrlerin zellikleri deitirilmi? -17=Tm deiiklikler: -18=Aklamalar: -19=Zaman: -20=Bilgisayar: -21=Kullanc? -22=Hakknda -23=Hata -24=Hata harici gstericinin arlmasnda olutu -25=Hata dosya yaratlamad? -26=Hata dosya alamad? -27=Hata dosya gstergesinin tanmasnda olutu -28=&1. kayt -29=&2. kayt -30=&Karlatrma -31=&Temizle -32=&k -33=&Hakknda -34=T&akip.. -35=Karlatrmay?kaydet: -36=Kayt yeri: -37=Yaplan kayda, aklama ekle: -38=&Dz Metin -39=&HTML dosyas -40=&Klasr tara; kls1[;kls2;kls nn]: -41=&Gzle -42=Gzle &ve Kaydet... -43=&Ykle -44=T&emizle -45=1. G?zlemi temizle -46=2. Gz&lemi temizle - -[Nederlands] -Translator=Paul Lowagie -1=Sleutels: -2=Waarden: -3=Mappen: -4=Bestanden: -5=Tijd: -6=Sleutels toegevoegd: -7=Sleutels verwijderd: -8=Waarden toegevoegd: -9=Waarden verwijderd: -10=Waarden gewijzigd: -11=Bestanden toegevoegd: -12=Bestanden verwijderd: -13=Bestanden (kenmerken?) gewijzigd: -14=Mappen toegevoegd: -15=Mappen verwijderd: -16=Mapkemmerken gewijzigd: -17=Totaal aantal wijzigingen: -18=Commentaar: -19=Datum & tijd: -20=Computer: -21=Gebruikersnaam: -22=Info -23=Fout -24=Fout bij starten externe kijker! -25=Fout bij creren bestand! -26=Fout bij openen regshot.vxd! -27=Fout bij bestandtoewijzing! -28=&1ste opname -29=&2de opname -30=V&ergelijken -31=&Wissen -32=&Afsluiten -33=&Info -34=&Monitor.. -35=Vergelijking opslaan als -36=Uitvoerpad: -37=Commentaar toevoegen in logbestand: -38=Platte &TXT -39=&HTML document -40=&Scan map1[;map2;...;map nn]: -41=&Opnemen -42=Opnemen en bewa&ren... -43=Lade&n... -44=&Alles wissen -45=Wissen &1ste opname -46=Wissen &2de opname - -[esky] -Translator=ondra -1=Kl? -2=Hodnot: -3=Adres? -4=Soubor? -5=as: -6=Kl?pidno: -7=Kl?vymazno: -8=Hodnot pidno: -9=Hodnot vymazno: -10=Hodnot zmnno: -11=Soubor?pidno: -12=Soubor?vymazno: -13=Soubor?[atribut?] zmnno: -14=Sloek pidno: -15=Sloek vymazno: -16=Atribut?sloek zmnno: -17=Celkem zmn: -18=Komente: -19=Datum&as: -20=Pota? -21=Jmno uivatele: -22=O programu -23=Chyba -24=Chyba pi spoutn?externho prohlee! -25=Chyba pi tvorb?souboru! -26=Chyba pi otevrn?souboru! -27=Error move file pointer! -28=&1. zznam -29=&2. zznam -30=P&orovnat -31=&Vymazat -32=&Konec -33=&O programu -34=&Monitor.. -35=Zznam o porovnn?uloit jako: -36=Pracovn?adres: -37=Pidat koment do zznamu: -38=&TXT -39=&HTML -40=Sl&oky: adr1[;...;adr nn]: -41=&Vytvoit -42=Vytvoit a ul&oit... -43=N&ast... -44=Vym&azat ve -45=Vymazat &1. zznam -46=Vymazat &2. zznam - -[Catal] -Translator=Pau Bosch i Crespo PauBCrespo@hotmail.com. Visiteu: www.all4you.dk si voleu ms programes gratuts en catal. -1=Claus: -2=Valors: -3=Directoris: -4=Arxius: -5=Temps: -6=Claus afegides: -7=Claus esborrades: -8=Valors afegits: -9=Valors esborrats: -10=Valors modificats: -11=Arxius afegits: -12=Arxius esborrats: -13=Atributs modificats d'arxiu: -14=Carpetes afegides: -15=Carpetes esborrades: -16=Atributs modificats de carpeta: -17=Total de canvis: -18=Comentaris: -19=Data i hora: -20=Ordinador: -21=Usuari: -22=Sobre -23=Error -24=Error en connectar amb el visualitzador extern! -25=Error en crear arxiu! -26=Error en obrir arxius! -27=Error en moure cursor d'arxiu! -28=&1r. Tret -29=&2n. Tret -30=C&ompara -31=&Neteja -32=S&urt -33=&Sobre -34=&Monitor.. -35=Compara registres desats com a: -36=Ruta de sortida: -37=Afegeix comentari al registre: -38=&Text -39=Document &HTML -40=&Escaneja dir1[;dir2;...;dir nn] -41=&Dispara -42=Dispara i &desa... -43=&Carrega... -44=&Neteja -45=Neteja &1r Tret -46=Neteja &2n Tret - -[] -Translator=Michael Papadakis -1=: -2=: -3=: -4=: -5=: -6= : -7= : -8= : -9= : -10= : -11= : -12= : -13= () : -14= : -15= : -16= () : -17= : -18=: -19=/: -20=: -21=: -22= -23= -24= Viewer! -25= ! -26= ! -27= ! -28=&1 -29=&2 -30=& -31=& -32=& -33=& -34=&.. -35= : -36= : -37= : -38= &TXT -39= &HTML -40= &1(;2;...): -41=& -42= &... -43=&... -44=& -45= &1 -46= &2 - -[Dansk] -Translator=Per Bryldt -1=Ngler: -2=Vrdier: -3=Mapper: -4=Filer: -5=Tid: -6=Ngler lagt til: -7=Slettede ngler: -8=Vrdier lagt til: -9=Slettede vrdier: -10=Forandrede vrdier: -11=Fil lagt til: -12=Slettede filer: -13=Filer [egenskaber] forandret: -14=Mapper lagt til: -15=Mapper slettet: -16=Mappe egenskaber forandret: -17=Antal ndringer: -18=Kommentarer: -19=Dato tid: -20=Computer navn: -21=Brugernavn: -22=Om -23=Fejl -24=Fejl bner External Viewer! -25=Fejl oprettelse af fil! -26=Fejl ben fil! -27=Fejl flyt fil pointer! -28=F&ste sgning -29=A&nden sgning -30=&Sammenlign -31=&Fortryd -32=&Afslut -33=&Om Regshot -34=Over&vg.. -35=Gemmer log som: -36=Log fil placering: -37=Tilfj en kommentar: -38=&Ren tekst -39=&Html format -40=Sg mappe1[;mappe2;osv]: -41=&Sg -42=Sg og G&em... -43=He&nt... -44=&Fortryd -45=Fortryd F&ste sgning -46=Fortryd A&nden sgning - -[Latvieu] -Translator=Armands Radzuka -1=Atslgas: -2=Vrtbas: -3=Mapes: -4=Faili: -5=Laiks: -6=Pievienots atslgas: -7=Dzsts atslgas: -8=Pievienots vrtbas: -9=Dzsts vrtbas: -10=Prveidots vrtbas: -11=Pievienotie faili: -12=Dzstie faili: -13=Prveidotie faili [atribti?]: -14=Pievienots mapes: -15=Dzsts mapes: -16=Prveidotie mapju atribti: -17=Kop izmaias: -18=Komentri: -19=Datums, laiks: -20=Dators: -21=Lietotjs: -22=Par -23=Kda -24=Kda izsaucot rjo apskattju! -25=Kda izveidojot failu! -26=Kda atverot failu! -27=Kda prveidojot faila rdtju! -28=&1. viens -29=&2. viens -30=&Saldzint -31=&Dzst -32=&Beigt -33=&Par -34=&Novrot.. -35=Saldzinanas protokolus saglabt k: -36=Izejas ce: -37=Pievienot komentru protokolam: -38=&Tekstu -39=&HTML dokumentu -40=&Skant mapi1[;mapi2;...]: -41=&viens -42=aut un sa&glabt... -43=Iel&dt... -44=&Dzst visu -45=Dzst &1. vienu -46=Dzst &2. vienu - - -[Portuguese] -Translator=Leandro -1=Chaves: -2=Valores: -3=Diretrios: -4=Arquivos: -5=Tempo: -6=Chaves adicionadas: -7=Chaves apagadas: -8=Valores adicionados: -9=Valores apagados: -10=Valores modificados: -11=Arquivos adicionados: -12=Arquivos apagados: -13=Arquivos [atributos?] modificados: -14=Pastas adicionadas: -15=Pastas apagadas: -16=Atributos de pastas alterados: -17=Total de alteraes: -18=Comentrios: -19=Dia/hora: -20=Computador: -21=Usurio: -22=Sobre -23=Erro -24=Erro ao chamar visualizador externo! -25=Erro ao criar arquivo! -26=Erro ao abrir arquivo! -27=Erro ao mover o ponteiro do arquivo! -28=&1 foto -29=&2 foto -30=&Comparar -31=&Limpar -32=Sai&r -33=&Sobre -34=&Monitor... -35=Salvar notas comparadas como: -36=Destino: -37=Adicionar comentrio em nota: -38=&Texto -39=&HTML -40=&Pesquisar diretrio: -41=&Fotografar -42=Fotografar e &salvar... -43=&Carregar... -44=&Limpar tudo -45=Apagar &1 foto -46=Apagar &2 foto - -[Slovensk] -Translator=Roland Turcan (regshot@rotursoft.sk) -1=Klvesy: -2=Hodnoty: -3=Prieinky: -4=Sbory: -5=as: -6=Ke pridan: -7=Ke zmazan: -8=Hodnoty pridan: -9=Hodnoty zmazan: -10=Hodnoty zmenen: -11=Sbory pridan: -12=Sbory zmazan: -13=Sbory [atribty?] zmenen: -14=Prieinky pridan: -15=Prieinky zmazan: -16=Atribty prieinkov zmenen: -17=Spolu zmien: -18=Komentre: -19=Dtum/as: -20=Pota: -21=Uvate: -22=O programe -23=Chyba -24=Chyba pri volan externho prehliadaa! -25=Chyba pri vytvran sboru! -26=Chyba pri otvoren sboru! -27=Chyba pri presvan ukazovatea v sbore! -28=&1. zznam -29=&2. zznam -30=P&orovnaj -31=&Vyma -32=&Koniec -33=&O Programe -34=&Monitor.. -35=Porovnaj zznamy a ulo ako: -36=Vstup ulo do: -37=Pridaj komentr do zznamu: -38=ist &TXT -39=&HTML dokument -40=&Hadaj dir1[;dir2;...;dir nn]: -41=&Zznam -42=Zaznamenaj a ulo... -43=Nataj... -44=&Vyma vetko -45=Vyma &1. zznam -46=Vyma &2. zznam - -[{] -Translator=Kentaro Okude -1=Keys: -2=Values: -3=Dirs: -4=Files: -5=Time: -6=ljꂽWXgL[: -7=폜ꂽWXgL[: -8=ljꂽl: -9=폜ꂽl: -10=ύX̂l: -11=ljꂽt@C: -12=폜ꂽt@C: -13=iHjύX̂t@C: -14=ljꂽtH_: -15=폜ꂽtH_: -16=ύX̂tH_: -17=S̕ύX: -18=Rg: -19=: -20=Rs[^: -21=[U[l[: -22=About -23=G[ -24=֘AtꂽvONł܂łB -25=t@C쐬ł܂łB -26=t@CJ炯܂łB -27=t@C|C^[𓮂܂łB -28=P -29=Q -30=r -31= -32=‚ -33=About -34=Ď -35=O̕ۑ`: -36=ۑ: -37=OɃRg}: -38=Text -39=HTML -40=ĎtH_: -41=sI -42=sZ[u -43=[h -44=ׂď -45=Pڂ̃O -46=Qڂ̃O - -[Polski] -Translator=Adam Mikusiski -1=Klucze: -2=Wartoci: -3=Katalogi: -4=Pliki: -5=Czas: -6=Klucze dodane: -7=Klucze usunite: -8=Wartoci dodane: -9=Wartoci usunite: -10=Wartoci zmodyfikowane: -11=Pliki dodane: -12=Pliki usunite: -13=Pliki [atrybuty?] zmodyfikowane: -14=Katalogi dodane: -15=Katalogi usunite: -16=Zmienione atrybuty katalogw: -17=Wszystkie zmiany: -18=Komentarze: -19=Data i godzina: -20=Komputer: -21=Nazwa uytkownika: -22=O programie -23=Bd -24=Bd wywoania przegldarki zewntrznej! -25=Bd tworzenia pliku! -26=Bd otwarcia pliku! -27=Bd przesunicia wskanika pliku! -28=Zdjcie &1 -29=Zdjcie &2 -30=&Porwnaj -31=W&yma -32=&Wyjcie -33=&O programie -34=&Monitor.. -35=Zapisz porwnanie rejestru jako: -36=Katalog docelowy: -37=Dodaj komentarz do rejestru: -38=&TXT -39=Dokument &HTML -40=&Skanuj kat1[;kat2;...;kat nn]: -41=&Zdjcie -42=Zdjcie + Za&pis... -43=W&czytaj... -44=W&yma wszystko -45=Wyma zdjcie &1 -46=Wyma zdjcie &2 - -[Serbian] -Translator=Computer Wizard -1=Kljuevi: -2=Vrednosti: -3=Direktorijumi: -4=Fajlovi: -5=Vreme: -6=Dodato kljuceva: -7=Obrisano kljuceva: -8=Dodato vrednosti: -9=Izbrisano vrednosti: -10=Izmenjeno vrednosti: -11=Dodato fajlova: -12=Izbrisano fajlova: -13=Fajlova [atributa?] izmenjeno: -14=Dodato foldera: -15=Izbrisano foldera: -16=Promenjeno atributa foldera: -17=Ukupno promena: -18=Komanda: -19=Datum i vreme: -20=Kompjuter: -21=Korisnicko ime: -22=O programu -23=Greka -24=Greka pri pozivanju eksternog viewer-a! -25=Greka pri kreiranju fajla! -26=Greka pri otvaranju fajla! -27=Greka pri promeni pokazivaa fajla! -28=&Prvi snimak -29=&Drugi snimak -30=&Uporedi -31=O&brii -32=&Izlaz -33=&O programu -34=&Monitor... -35=Rezultat poreenja snimi kao: -36=Izlazna putanja: -37=Dodaj komentar u log: -38=&Tekst -39=&HTML dokument -40=&Skeniraj dir1[;dir2;...;dir nn]: -41=&Snimi -42=Snimi i sauvaj na &disku... -43=&Uitaj... -44=&Obrii sve -45=Obrii prvi snimak -46=Obrii drugi snimak - -[Hebrew-] -Translator=Jack Gorji-[' ']-Email:zakgj@hotmail.com -1=: -2=: -3=: -4=: -5=-Time: -6= : -7= : -8= : -9= : -10= : -11= : -12= : -13= : -14= : -15= : -16= : -17=" : -18=: -19= : -20= : -21= : -22=& -23= -24= ! -25= ! -26= ! -27= ! -28=& '1 -29=& '2 -30=& -31=& -32=& -33=& -34= -35= -36= : -37= : -38=Plain &TXT -39=&HTML document -40=& dir1[;dir2;...;dir nn]: -41=& -42= ... -43=... -44= & -45= & -46= & - -[Galego] -Translator=Xos Antn Vicente Rodrguez (antonvicente@navegalia.com) -1=Claves: -2=Valores: -3=Directorios: -4=Arquivos: -5=Tempo: -6=Claves engadidas: -7=Claves borradas: -8=Valores engadidos: -9=Valores borrados: -10=Valores modificados: -11=Arquivos engadidos: -12=Arquivos borrados: -13=Atributos de arquivo modificados: -14=Cartafois engadidos: -15=Cartafois borrados: -16=Atributos de cartafol modificados: -17=Total de trocos: -18=Comentarios: -19=Data e hora: -20=Computador: -21=Usuario: -22=Sobre -23=Erro -24=Erro ao chamar a un visor externo! -25=Erro ao crear arquivo! -26=Erro ao abrir arquivos! -27=Erro ao mover punteiro de arquivo! -28=&1ra. Foto -29=&2da. Foto -30=C&omparar -31=&Limpar -32=S&ar -33=&Sobre -34=&Monitor.. -35=Comparar logs gardados como: -36=Ruta de sada: -37=Engadir comentario ao log: -38=&Texto -39=Documento &HTML -40=&Escanear dir1[;dir2;...;dir nn] -41=&Foto -42=Foto + &gardar... -43=&Cargar... -44=&Limpar -45=Limpar &1ra. Foto -46=Limpar &2da. Foto - -[Hrvatski] -Translator=Obelix (JK875@yahoo.cu.uk) -1=Kljuevi: -2=Vrijednosti: -3=Direktoriji: -4=Datoteke: -5=Vrijeme: -6=Dodano kljuceva: -7=Brisano kljuceva: -8=Dodano vrijednosti: -9=Brisano vrijednosti: -10=Izmijenjeno vrijednosti: -11=Dodano datoteka: -12=Izbrisano datoteka: -13=Datoteka [atributa?] izmijenjeno: -14=Dodano pod_direktorija: -15=Brisano pod_direktorija: -16=Promijenjeno atributa pod_direktorija: -17=Ukupno promjena: -18=Komanda: -19=Datum i vrijeme: -20=Kompjutor: -21=Korisniko ime: -22=O programu -23=Greka -24=Greka pri pozivanju vanjskog preglednika! -25=Greka pri kreiranju datoteke! -26=Greka pri otvaranju datoteke! -27=Greka pri promjeni pokazivaa datoteke! -28=&Prvi snimak -29=&Drugi snimak -30=&Usporedi -31=&Brii -32=&Izlaz -33=&O programu -34=&Monitor... -35=Rezultat usporedbe spremi kao: -36=Izlazna putanja: -37=Dodaj komentar u log: -38=&Tekst -39=&HTML dokument -40=&Pretrai dir1[;dir2;...;dir nn]: -41=&Snimi -42=Snimi i spremi na &disk... -43=&Uitaj... -44=&Bbrii sve -45=Brii prvi snimak -46=Brii drugi snimak - -[Bulgarian] -Translator=Alex Simidchiev -1=: -2=: -3=: -4=: -5=: -6= : -7= : -8= : -9= : -10= : -11= : -12= : -13= []: -14= : -15= : -16= []: -17= : -18=: -19= : -20= : -21= : -22= -23= -24= ! -25= ! -26= ! -27=Error move file pointer! -28=&1 -29=&2 -30=& -31=& -32=& -33=& -34=&... -35= : -36= : -37= : -38=& -39=& HTML -40=& [dir1;dir2;...;dir nn]: -41=& -42= + ... -43=&... -44=& -45= &1 -46= &2 - -[Svenska] -Translator=joup@algonet.se -1=Nycklar: -2=Vrden: -3=Kataloger: -4=Filer: -5=Tid: -6=Adderade nycklar: -7=Borttagna nycklar: -8=Adderade vrden: -9=Borttagna vrden: -10=ndrade vrden: -11=Adderade filer: -12=Borttagna filer: -13=ndrade filer [attribut?]: -14=Adderade kataloger: -15=Borttagna kataloger: -16=ndrade katalogattribut: -17=Totala ndringar: -18=Kommentarer: -19=Datum/tid: -20=Dator: -21=Anvndarnamn: -22=Om -23=Fel -24=Fel vid anrop av extern filvisare! -25=Kunde inte skapa fil! -26=Kunde inte ppna fil! -27=Fel vid flyttning av filpekare! -28=&1:a tagningen -29=&2:a tagningen -30=&Jmfr -31=&Tm -32=A&vsluta -33=&Om Regshot -34=&Bevaka.. -35=Jmfrelselog sparas som: -36=Mlkatalog: -37=Lgg till kommentar i loggen: -38=Ren &TXT -39=&HTMLdokument -40=&Scanna dir1[;dir2;...;dir nn]: -41=&Shot -42=Shot och spa&ra... -43=Ls &in... -44=&Tm allt -45=Tm &1:a tagningen -46=Tm &2:a tagningen - -[Hungarian] -Translator=Bata Gyrgy -1=Kulcsok: -2=rtkek: -3=Mappk: -4=Fjlok: -5=Id: -6=Hozzadott rendszerler kulcsok: -7=Trlt rendszerler kulcsok: -8=Hozzadott rendszerler rtkek: -9=Trlt rendszerler rtkek: -10=Mdostott rendszerler rtkek: -11=Hozzadott fjlok: -12=Trlt fjlok: -13=Mdostott fjlok [attribtumok]: -14=Hozzadott mappk: -15=Trlt mappk: -16=Mdostott mappa attribtumok: -17=sszes vltozs: -18=Megjegyzs: -19=Dtum s id: -20=Szmtgp: -21=Felhasznlnv: -22=Nvjegy -23=Hiba -24=Hiba a kls szerkeszt meghvsakor! -25=Hiba a fjl ltrehozsakor! -26=Hiba a fjl megnyitsakor! -27=Hiba a fjlmutat mozgatsakor! -28=&1. Minta -29=&2. Minta -30=&sszevets -31=&Trls -32=&Kilps -33=&Nvjegy -34=Figy&els... -35=Naplfjl formtuma: -36=Eredmny mentse ide: -37=Megjegyzs a naplfjlban, fjlnv: -38=T&XT fjl -39=&HTML fjl -40=&Figyelt mappk [a;b;c;...]: -41=&Vizsglat -42=Vizsglat s &ments... -43=&Betlts... -44=&Mind trlse -45=&1. Minta trlse -46=&2. Minta trlse - -[] -Translator=Dmitry P. -1=: -2=: -3=: -4=: -5=: -6= : -7= : -8= : -9= : -10= : -11= : -12= : -13= []: -14= : -15= : -16= []: -17= : -18=: -19= : -20=' ': -21=' : -22= -23= -24= ! -25= ! -26= ! -27=Error move file pointer! -28=1 -29=2 -30= -31= -32= -33= -34= -35= : -36= : -37= : -38= -39= HTML -40= 1[;dir2;...]: -41= -42= + ... -43=³... -44= -45= 1 -46= 2 - -[Kazakh] -Translator= -1=: -2=: -3=: -4=: -5=: -6= : -7=f o: -8= : -9=f : -10= : -11= : -12=f : -13= []: -14= : -15=f : -16= []: -17= : -18= : -19=ff : -20= : -21= : -22=C -23= -24= ! -25= ! -26= ! -27=Error move file pointer! -28=&1 -29=&2 -30=& -31=& -32=&f -33=&C -34=&... -35= : -36= : -37= : -38=& -39=&HTML -40=& 1[;dir2;...;dir nn]: -41=& -42= + &... -43=&... -44=& -45= &1 -46= &2 - diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe deleted file mode 100644 index 215e6fa..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini deleted file mode 100644 index 69e57de..0000000 --- a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini +++ /dev/null @@ -1,16 +0,0 @@ -[Setup] -Flag=1 -ExtDir= -Language= -OutDir= -UseLongRegHead=0 - -[SkipRegKey] -0= -1= -2= - -[SkipDir] -0= -1= -2= diff --git a/deb/opt/apps/deepin-wine-runner/RemoveQemuUser.sh b/deb/opt/apps/deepin-wine-runner/RemoveQemuUser.sh deleted file mode 100755 index 95e2c71..0000000 --- a/deb/opt/apps/deepin-wine-runner/RemoveQemuUser.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# 判断是否有安装 Qemu User -which qemu-i386 > /dev/null -if [[ ! $? ]]; then - echo 您未安装 Qemu User,按回车键后退出 - read - exit 1 -fi -sudo apt purge qemu-user -y -echo 安装完成,按回车键后退出 -read \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/Run.bat b/deb/opt/apps/deepin-wine-runner/Run.bat deleted file mode 100755 index 496b3bd..0000000 --- a/deb/opt/apps/deepin-wine-runner/Run.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -::########################################################################################### -::# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -::# 版本:1.5.1 -::# 更新时间:2022年07月05日 -::# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -::# 基于 Python3 的 tkinter 构建 -::########################################################################################### -:: 遍历盘符判断文件是否存在,如果存在则运行指定程序 -for %%i in (Z, Y, X, W, V, U, T, S, R, Q, P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A) do ( - if exist %%i":"%1 ( - start %%i:%1 %%i:%2 - echo %%i:%1 %2 - exit - ) - else ( - echo Unable To Find File - )) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/RunCommandWithTerminal.py b/deb/opt/apps/deepin-wine-runner/RunCommandWithTerminal.py deleted file mode 100644 index d988f6a..0000000 --- a/deb/opt/apps/deepin-wine-runner/RunCommandWithTerminal.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -import sys -from Model import * -if len(sys.argv) < 2: - print("请加入需要的命令") - sys.exit(1) -o = "" -for i in sys.argv[1:]: - o += f"'{i}' " -OpenTerminal(o) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/RunVM.sh b/deb/opt/apps/deepin-wine-runner/RunVM.sh deleted file mode 100755 index e9acce0..0000000 --- a/deb/opt/apps/deepin-wine-runner/RunVM.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# 使用系统默认的 bash 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:2.4.1 -# 更新时间:2022年11月06日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 tkinter 构建 -########################################################################################### -cd `dirname $0` -which VBoxManage -if test $? == 0 ; then - VM/VirtualMachine - exit -fi -zenity --info --no-wrap --text="未安装 VirtualBox,请自行安装 VirtualBox 并重新运行" -#./launch.sh deepin-terminal -C "pkexec apt install virtualbox-6.1 -y && zenity --info --text=\"安装完毕,关闭此对话框和安装终端重新运行程序即可\" --no-wrap" --keep-open diff --git a/deb/opt/apps/deepin-wine-runner/ShellList/InstallQemuUserStatic.sh b/deb/opt/apps/deepin-wine-runner/ShellList/InstallQemuUserStatic.sh deleted file mode 100755 index 8d71f53..0000000 --- a/deb/opt/apps/deepin-wine-runner/ShellList/InstallQemuUserStatic.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -echo 开始安装 qemu-user-static -pkexec apt update -# binfmt-support 是非常重要的 -pkexec apt install qemu-user-static binfmt-support -y \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/StartVM.sh b/deb/opt/apps/deepin-wine-runner/StartVM.sh deleted file mode 100755 index 28ba2b7..0000000 --- a/deb/opt/apps/deepin-wine-runner/StartVM.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# 使用系统默认的 bash 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:1.7.0 -# 更新时间:2022年07月15日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 tkinter 构建 -########################################################################################### -VBoxManage showvminfo Windows -if [[ 0 == $? ]]; then - # 检测到虚拟机存在,启动虚拟机 - VBoxManage startvm Windows - exit -fi -# 检查是否有 QEMU -if [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then - if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then - echo 有设置文件,读设置文件 - cd `dirname $0` - python3 ./VM/StartQemu.py - exit - fi - # 查看逻辑CPU的个数 - CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l` - - # 总内存大小GB - MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo` - use=$(echo "scale=4; $MemTotal / 3" | bc) - if [[ `arch` == "x86_64" ]]; then - echo X86 架构,使用 kvm 加速 - kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 - exit - fi - echo 非 X86 架构,不使用 kvm 加速 - qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 - exit -fi -zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用" -if [[ 1 == $? ]]; then - # 用户不想创建虚拟机,结束 - exit -fi -cd `dirname $0` -./VM/VirtualMachine diff --git a/deb/opt/apps/deepin-wine-runner/Test/net.exe b/deb/opt/apps/deepin-wine-runner/Test/net.exe deleted file mode 100755 index 0be1c09..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Test/net.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Test/netandie.exe b/deb/opt/apps/deepin-wine-runner/Test/netandie.exe deleted file mode 100755 index 22d0920..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Test/netandie.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/Test/vb.exe b/deb/opt/apps/deepin-wine-runner/Test/vb.exe deleted file mode 100755 index 1945430..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/Test/vb.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py b/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py deleted file mode 100755 index 3419fc3..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'AutoConfig.ui' -# -# Created by: PyQt5 UI code generator 5.11.3 -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore, QtGui, QtWidgets - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(800, 600) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.searchTips = QtWidgets.QLabel(self.centralwidget) - self.searchTips.setObjectName("searchTips") - self.horizontalLayout.addWidget(self.searchTips) - self.searchThings = QtWidgets.QLineEdit(self.centralwidget) - self.searchThings.setObjectName("searchThings") - self.horizontalLayout.addWidget(self.searchThings) - self.saerchBotton = QtWidgets.QPushButton(self.centralwidget) - self.saerchBotton.setObjectName("saerchBotton") - self.horizontalLayout.addWidget(self.saerchBotton) - self.verticalLayout_3.addLayout(self.horizontalLayout) - self.searchList = QtWidgets.QListView(self.centralwidget) - self.searchList.setObjectName("searchList") - self.verticalLayout_3.addWidget(self.searchList) - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_2.addItem(spacerItem) - self.getInfoButton = QtWidgets.QPushButton(self.centralwidget) - self.getInfoButton.setObjectName("getInfoButton") - self.horizontalLayout_2.addWidget(self.getInfoButton) - self.getFen = QtWidgets.QPushButton(self.centralwidget) - self.getFen.setObjectName("getFen") - self.horizontalLayout_2.addWidget(self.getFen) - self.runBotton = QtWidgets.QPushButton(self.centralwidget) - self.runBotton.setObjectName("runBotton") - self.horizontalLayout_2.addWidget(self.runBotton) - self.verticalLayout_3.addLayout(self.horizontalLayout_2) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 36)) - self.menubar.setObjectName("menubar") - self.menu = QtWidgets.QMenu(self.menubar) - self.menu.setObjectName("menu") - self.menu_2 = QtWidgets.QMenu(self.menubar) - self.menu_2.setObjectName("menu_2") - MainWindow.setMenuBar(self.menubar) - self.about = QtWidgets.QAction(MainWindow) - self.about.setObjectName("about") - self.exitProgram = QtWidgets.QAction(MainWindow) - self.exitProgram.setObjectName("exitProgram") - self.help = QtWidgets.QAction(MainWindow) - self.help.setObjectName("help") - self.openFile = QtWidgets.QAction(MainWindow) - self.openFile.setObjectName("openFile") - self.actionGitlink = QtWidgets.QAction(MainWindow) - self.actionGitlink.setCheckable(True) - self.actionGitlink.setChecked(True) - self.actionGitlink.setObjectName("actionGitlink") - self.actionGitee = QtWidgets.QAction(MainWindow) - self.actionGitee.setCheckable(True) - self.actionGitee.setObjectName("actionGitee") - self.actionGithub = QtWidgets.QAction(MainWindow) - self.actionGithub.setCheckable(True) - self.actionGithub.setObjectName("actionGithub") - self.action_IPv6 = QtWidgets.QAction(MainWindow) - self.action_IPv6.setCheckable(True) - self.action_IPv6.setObjectName("action_IPv6") - self.action = QtWidgets.QAction(MainWindow) - self.action.setCheckable(True) - self.action.setObjectName("action") - self.action_2 = QtWidgets.QAction(MainWindow) - self.action_2.setCheckable(True) - self.action_2.setChecked(False) - self.action_2.setObjectName("action_2") - self.action_3 = QtWidgets.QAction(MainWindow) - self.action_3.setCheckable(True) - self.action_3.setObjectName("action_3") - self.menu.addAction(self.openFile) - self.menu.addSeparator() - self.menu.addAction(self.exitProgram) - self.menu_2.addAction(self.actionGitlink) - self.menu_2.addAction(self.actionGitee) - self.menu_2.addAction(self.actionGithub) - self.menu_2.addAction(self.action_IPv6) - self.menu_2.addAction(self.action_2) - self.menu_2.addAction(self.action_3) - self.menu_2.addAction(self.action) - self.menubar.addAction(self.menu.menuAction()) - self.menubar.addAction(self.menu_2.menuAction()) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "自动部署脚本")) - self.searchTips.setText(_translate("MainWindow", "搜索内容(为空代表显示所有内容):")) - self.saerchBotton.setText(_translate("MainWindow", "搜索")) - self.getInfoButton.setText(_translate("MainWindow", "获取选中项介绍")) - self.getFen.setText(_translate("MainWindow", "获取/提交选中项的评分和评论")) - self.runBotton.setText(_translate("MainWindow", "部署此方案")) - self.menu.setTitle(_translate("MainWindow", "程序")) - self.menu_2.setTitle(_translate("MainWindow", "切换源")) - self.about.setText(_translate("MainWindow", "关于")) - self.exitProgram.setText(_translate("MainWindow", "退出程序")) - self.help.setText(_translate("MainWindow", "帮助")) - self.openFile.setText(_translate("MainWindow", "打开本地部署脚本")) - self.actionGitlink.setText(_translate("MainWindow", "Gitlink 源(推荐)")) - self.actionGitee.setText(_translate("MainWindow", "Gitee 源")) - self.actionGithub.setText(_translate("MainWindow", "Github 源(国外用户推荐)")) - self.action_IPv6.setText(_translate("MainWindow", "备用源1(只限IPv6用户)")) - self.action.setText(_translate("MainWindow", "本地测试源(127.0.0.1)")) - self.action_2.setText(_translate("MainWindow", "备用源2")) - self.action_3.setText(_translate("MainWindow", "备用源3")) - diff --git a/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.ui b/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.ui deleted file mode 100755 index ea5b234..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.ui +++ /dev/null @@ -1,199 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 800 - 600 - - - - 自动部署脚本 - - - - - - - - - 搜索内容(为空代表显示所有内容): - - - - - - - - - - 搜索 - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 获取选中项介绍 - - - - - - - 获取/提交选中项的评分和评论 - - - - - - - 部署此方案 - - - - - - - - - - - 0 - 0 - 800 - 36 - - - - - 程序 - - - - - - - - 切换源 - - - - - - - - - - - - - - - 关于 - - - - - 退出程序 - - - - - 帮助 - - - - - 打开本地部署脚本 - - - - - true - - - true - - - Gitlink 源(推荐) - - - - - true - - - Gitee 源 - - - - - true - - - Github 源(国外用户推荐) - - - - - true - - - 备用源1(只限IPv6用户) - - - - - true - - - 本地测试源(127.0.0.1) - - - - - true - - - false - - - 备用源2 - - - - - true - - - 备用源3 - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.py b/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.py deleted file mode 100755 index 45e7d8c..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'KeyAddGui.ui' -# -# Created by: PyQt5 UI code generator 5.11.3 -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore, QtGui, QtWidgets - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(692, 314) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) - self.verticalLayout.setObjectName("verticalLayout") - self.tips = QtWidgets.QLabel(self.centralwidget) - self.tips.setObjectName("tips") - self.verticalLayout.addWidget(self.tips) - self.keyBoardList = QtWidgets.QListView(self.centralwidget) - self.keyBoardList.setObjectName("keyBoardList") - self.verticalLayout.addWidget(self.keyBoardList) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem) - self.addButton = QtWidgets.QPushButton(self.centralwidget) - self.addButton.setObjectName("addButton") - self.horizontalLayout.addWidget(self.addButton) - self.editButton = QtWidgets.QPushButton(self.centralwidget) - self.editButton.setObjectName("editButton") - self.horizontalLayout.addWidget(self.editButton) - self.delectButton = QtWidgets.QPushButton(self.centralwidget) - self.delectButton.setObjectName("delectButton") - self.horizontalLayout.addWidget(self.delectButton) - self.verticalLayout.addLayout(self.horizontalLayout) - MainWindow.setCentralWidget(self.centralwidget) - self.menuBar = QtWidgets.QMenuBar(MainWindow) - self.menuBar.setGeometry(QtCore.QRect(0, 0, 692, 33)) - self.menuBar.setObjectName("menuBar") - self.menu = QtWidgets.QMenu(self.menuBar) - self.menu.setObjectName("menu") - MainWindow.setMenuBar(self.menuBar) - self.action = QtWidgets.QAction(MainWindow) - self.action.setObjectName("action") - self.serverTips = QtWidgets.QAction(MainWindow) - self.serverTips.setEnabled(False) - self.serverTips.setObjectName("serverTips") - self.startServer = QtWidgets.QAction(MainWindow) - self.startServer.setObjectName("startServer") - self.stopServer = QtWidgets.QAction(MainWindow) - self.stopServer.setObjectName("stopServer") - self.setAutoStart = QtWidgets.QAction(MainWindow) - self.setAutoStart.setObjectName("setAutoStart") - self.setUnautoStart = QtWidgets.QAction(MainWindow) - self.setUnautoStart.setObjectName("setUnautoStart") - self.menu.addAction(self.serverTips) - self.menu.addSeparator() - self.menu.addAction(self.startServer) - self.menu.addAction(self.stopServer) - self.menu.addSeparator() - self.menu.addAction(self.setAutoStart) - self.menu.addAction(self.setUnautoStart) - self.menuBar.addAction(self.menu.menuAction()) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "编辑快捷键")) - self.tips.setText(_translate("MainWindow", "

此工具可以用于设置快捷键到 Wine 容器的映射,以便 Wine 程序可以正常的使用快捷键
Deepin/UOS将会使用默认的快捷键服务,其它发行版将使用此运行器提供的快捷键服务
Deepin/UOS将只会提供快捷键添加功能,请在控制中心进行快捷键的修改管理

")) - self.addButton.setText(_translate("MainWindow", "添加")) - self.editButton.setText(_translate("MainWindow", "编辑")) - self.delectButton.setText(_translate("MainWindow", "删除")) - self.menu.setTitle(_translate("MainWindow", "设置快捷键服务")) - self.action.setText(_translate("MainWindow", "关于")) - self.serverTips.setText(_translate("MainWindow", "此内容只支持非Deepin/UOS发行版")) - self.startServer.setText(_translate("MainWindow", "启动服务")) - self.stopServer.setText(_translate("MainWindow", "停止服务")) - self.setAutoStart.setText(_translate("MainWindow", "设置开机自启")) - self.setUnautoStart.setText(_translate("MainWindow", "关闭开机自启动")) - diff --git a/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.ui b/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.ui deleted file mode 100755 index a0869ec..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/KeyAddGui.ui +++ /dev/null @@ -1,127 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 692 - 314 - - - - 编辑快捷键 - - - - - - - <html><head/><body><p>此工具可以用于设置快捷键到 Wine 容器的映射,以便 Wine 程序可以正常的使用快捷键<br/>Deepin/UOS将会使用默认的快捷键服务,其它发行版将使用此运行器提供的快捷键服务<br>Deepin/UOS将只会提供快捷键添加功能,请在控制中心进行快捷键的修改管理</p></body></html> - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 添加 - - - - - - - 编辑 - - - - - - - 删除 - - - - - - - - - - - 0 - 0 - 692 - 33 - - - - - 设置快捷键服务 - - - - - - - - - - - - - - 关于 - - - - - false - - - 此内容只支持非Deepin/UOS发行版 - - - - - 启动服务 - - - - - 停止服务 - - - - - 设置开机自启 - - - - - 关闭开机自启动 - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.py b/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.py deleted file mode 100755 index 5e4e12c..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'KeyAddKeyboardGui.ui' -# -# Created by: PyQt5 UI code generator 5.11.3 -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore, QtGui, QtWidgets - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(800, 195) - icon = QtGui.QIcon.fromTheme("..") - MainWindow.setWindowIcon(icon) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) - self.verticalLayout.setObjectName("verticalLayout") - self.addTips = QtWidgets.QLabel(self.centralwidget) - self.addTips.setObjectName("addTips") - self.verticalLayout.addWidget(self.addTips) - self.horizontalLayout_3 = QtWidgets.QHBoxLayout() - self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.exeNameTips = QtWidgets.QLabel(self.centralwidget) - self.exeNameTips.setObjectName("exeNameTips") - self.horizontalLayout_3.addWidget(self.exeNameTips) - self.exeName = QtWidgets.QLineEdit(self.centralwidget) - self.exeName.setObjectName("exeName") - self.horizontalLayout_3.addWidget(self.exeName) - self.verticalLayout.addLayout(self.horizontalLayout_3) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.localTips = QtWidgets.QLabel(self.centralwidget) - self.localTips.setObjectName("localTips") - self.horizontalLayout.addWidget(self.localTips) - self.localKeyboardChoose = QtWidgets.QComboBox(self.centralwidget) - self.localKeyboardChoose.setObjectName("localKeyboardChoose") - self.horizontalLayout.addWidget(self.localKeyboardChoose) - self.addTips_2 = QtWidgets.QLabel(self.centralwidget) - self.addTips_2.setObjectName("addTips_2") - self.horizontalLayout.addWidget(self.addTips_2) - self.localKey = QtWidgets.QLineEdit(self.centralwidget) - self.localKey.setObjectName("localKey") - self.horizontalLayout.addWidget(self.localKey) - self.wineTips = QtWidgets.QLabel(self.centralwidget) - self.wineTips.setObjectName("wineTips") - self.horizontalLayout.addWidget(self.wineTips) - self.wineKeyboardChoose = QtWidgets.QComboBox(self.centralwidget) - self.wineKeyboardChoose.setObjectName("wineKeyboardChoose") - self.horizontalLayout.addWidget(self.wineKeyboardChoose) - self.addTipsWine = QtWidgets.QLabel(self.centralwidget) - self.addTipsWine.setObjectName("addTipsWine") - self.horizontalLayout.addWidget(self.addTipsWine) - self.wineKey = QtWidgets.QLineEdit(self.centralwidget) - self.wineKey.setObjectName("wineKey") - self.horizontalLayout.addWidget(self.wineKey) - self.verticalLayout.addLayout(self.horizontalLayout) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout.addItem(spacerItem) - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_2.addItem(spacerItem1) - self.addButton = QtWidgets.QPushButton(self.centralwidget) - self.addButton.setObjectName("addButton") - self.horizontalLayout_2.addWidget(self.addButton) - self.verticalLayout.addLayout(self.horizontalLayout_2) - MainWindow.setCentralWidget(self.centralwidget) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "添加快捷键")) - self.addTips.setText(_translate("MainWindow", "暂时只支持特定组合\n" -"文本框内的只能输入单字母")) - self.exeNameTips.setText(_translate("MainWindow", "可这执行文件名称:")) - self.localTips.setText(_translate("MainWindow", "本地映射:")) - self.addTips_2.setText(_translate("MainWindow", "+")) - self.wineTips.setText(_translate("MainWindow", "Wine 容器映射内容:")) - self.addTipsWine.setText(_translate("MainWindow", "+")) - self.addButton.setText(_translate("MainWindow", "添加快捷键")) - diff --git a/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.ui b/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.ui deleted file mode 100755 index b6eb4bc..0000000 --- a/deb/opt/apps/deepin-wine-runner/UI/KeyAddKeyboardGui.ui +++ /dev/null @@ -1,130 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 800 - 195 - - - - 添加快捷键 - - - - ../../../.designer/backup../../../.designer/backup - - - - - - - 暂时只支持特定组合 -文本框内的只能输入单字母 - - - - - - - - - 可这执行文件名称: - - - - - - - - - - - - - - 本地映射: - - - - - - - - - - + - - - - - - - - - - Wine 容器映射内容: - - - - - - - - - - + - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - 添加快捷键 - - - - - - - - - - - diff --git a/deb/opt/apps/deepin-wine-runner/UnMount.sh b/deb/opt/apps/deepin-wine-runner/UnMount.sh deleted file mode 100755 index 834a626..0000000 --- a/deb/opt/apps/deepin-wine-runner/UnMount.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -if [ ` whoami ` != "root" ]; then - echo "Only root can run me" - exit 1 -fi -if [ ! -d "$1" ]; then - echo "路径不存在!" - exit 1 -fi -echo $0 -echo $1 -echo $2 -#echo $3 -# 挂载必备目录 -cd "$1" -umount ./dev -umount ./dev/pts -umount ./proc -umount ./etc/resolv.conf -umount ./sys -umount ./dev/shm -# 挂载 Wine 运行器目录 -umount ./opt -umount ./opt/apps/deepin-wine-runner -# 挂载字体 -umount ./usr/share/fonts -# 挂载用户目录到 /root(默认 $HOME 路径) -umount ./root -for username in $(ls ./home) - do - echo ./home/$username - umount ./home/$username -# if [ -d ./home/$username/.deepinwine/$CONTAINER_NAME ] -# then -# rm -rf ./home/$username/.deepinwine/$CONTAINER_NAME -# fi - done diff --git a/deb/opt/apps/deepin-wine-runner/UpdateGeek.sh b/deb/opt/apps/deepin-wine-runner/UpdateGeek.sh deleted file mode 100755 index 2ba2ca8..0000000 --- a/deb/opt/apps/deepin-wine-runner/UpdateGeek.sh +++ /dev/null @@ -1,20 +0,0 @@ -echo -echo ' mmm # ' -echo ' m" " mmm mmm # m ' -echo ' # mm #" # #" # # m" ' -echo ' # # #"""" #"""" #"# ' -echo ' "mmm" "#mm" "#mm" # "m ' -echo -echo -cd /tmp -echo 提示: -echo Geek Uninstaller 官网访问较慢,所以请耐心等待 -aria2c -x 16 -s 16 https://geekuninstaller.com/geek.zip -unzip geek.zip -cd `dirname $0` -cp -rv /tmp/geek.exe ./ -if [[ $? == 0 ]];then - exit -fi -echo "拷贝失败,申请使用 sudo 拷贝" -sudo cp -rv /tmp/geek.exe ./ \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/VM/StartQemu.py b/deb/opt/apps/deepin-wine-runner/VM/StartQemu.py deleted file mode 100644 index a6a2d81..0000000 --- a/deb/opt/apps/deepin-wine-runner/VM/StartQemu.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import json -import traceback - -def ReadTXT(file: str): - with open(file, "r") as file: - things = file.read() - return things - -# 运行 -command = "qemu-system-x86_64" -#if "--kvm" in sys.argv: -# command = "kvm" - -homePath = os.path.expanduser('~') -try: - setting = json.loads(ReadTXT(f"{homePath}/.config/deepin-wine-runner/QemuSetting.json")) -except: - print("无法读取配置") - traceback.print_exc() - sys.exit(1) -option = f"-nic model=rtl8139 --hda \"$HOME/Qemu/Windows/Windows.qcow2\" -usb -m {setting['Memory']}M -smp {setting['CPU']} " -if setting["EnableKVM"]: - command = "kvm" -if setting["EnableRDP"]: - option += "-net user,hostfwd=tcp::3389-:3389 " -if setting["EnableVNC"]: - option += f"-display gtk -display vnc=:{setting['VNC']} " -if setting["EnableSound"]: - option += "-soundhw all " -os.system(f"{command} {option}") diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine deleted file mode 100755 index 121eb43..0000000 --- a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python3 -import os -import subprocess -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -arch = subprocess.getoutput("arch").replace(" ", "").replace("\n", "") -if os.path.exists(f"{programPath}/VirtualMachine-{arch}"): - os.system(f"{programPath}/VirtualMachine-{arch}") - exit() -# 只能使用 Qemu User 运行程序 -if os.path.exists("/usr/lib/x86_64-linux-gnu/") and not os.system("which qemu-x86_64"): - os.system(f"qemu-x86_64 '{programPath}/VirtualMachine-x86_64'") - exit() -print("未安装环境,立即安装!") -os.system(f"python3 '{programPath}/../RunCommandWithTerminal.py' '{programPath}/../InstallRuntime/amd64.sh'") diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-aarch64 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-aarch64 deleted file mode 100755 index 5e54da3..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-aarch64 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-armv7l b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-armv7l deleted file mode 100755 index ee4c428..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-armv7l and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-i686 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-i686 deleted file mode 100755 index 4242327..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-i686 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-loongarch64 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-loongarch64 deleted file mode 100755 index 925411f..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-loongarch64 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips deleted file mode 100755 index 0adb3e1..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips64 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips64 deleted file mode 100755 index 746a786..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-mips64 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc deleted file mode 100755 index b55a9f7..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc64el b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc64el deleted file mode 100755 index 011ba0c..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-ppc64el and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-riscv64 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-riscv64 deleted file mode 100755 index 0cb7b43..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-riscv64 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-s390x b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-s390x deleted file mode 100755 index 70eab01..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-s390x and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-x86_64 b/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-x86_64 deleted file mode 100755 index 2be1dff..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/VirtualMachine-x86_64 and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/Windows7X64Auto.iso b/deb/opt/apps/deepin-wine-runner/VM/Windows7X64Auto.iso deleted file mode 100755 index 205fcc6..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/Windows7X64Auto.iso and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/Windows7X86Auto.iso b/deb/opt/apps/deepin-wine-runner/VM/Windows7X86Auto.iso deleted file mode 100755 index 079fed9..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/VM/Windows7X86Auto.iso and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/VM/deepin-wine-runner.svg b/deb/opt/apps/deepin-wine-runner/VM/deepin-wine-runner.svg deleted file mode 100755 index c404135..0000000 --- a/deb/opt/apps/deepin-wine-runner/VM/deepin-wine-runner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/arm-package.7z b/deb/opt/apps/deepin-wine-runner/arm-package.7z deleted file mode 100755 index 577a77b..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/arm-package.7z and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/clean-unuse-program.py b/deb/opt/apps/deepin-wine-runner/clean-unuse-program.py deleted file mode 100755 index 7cf06e5..0000000 --- a/deb/opt/apps/deepin-wine-runner/clean-unuse-program.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -import os -import updatekiller - -if __name__ == "__main__": - print(''' - mmm ""# - m" " # mmm mmm m mm - # # #" # " # #" # - # # #"""" m"""# # # - "mmm" "mm "#mm" "mm"# # # - - -''') - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - print("此程序可以帮助您删除程序无需的组件以节约空间") - print("如果全部删除,将只会有核心功能") - print("如果删除后想要恢复这样组件需要重新安装该软件包") - delProgramList = [] - delProramCommand = "#!/bin/bash\n" - for i in [ - [ - "含有商业软件的内容", - [ - f"{programPath}/StartVM.sh", - f"{programPath}/RunVM.sh", - f"{programPath}/VM", - "/usr/share/applications/spark-deepin-wine-runner-control-vm.desktop", - "/usr/share/applications/spark-deepin-wine-runner-start-vm.desktop", - f"{programPath}/BeCyIconGrabber.exe", - f"{programPath}/geek.exe", - f"{programPath}/窗体透明度设置工具.exe", - f"{programPath}/UpdateGeek.sh", - f"{programPath}/AppStore.py", - f"{programPath}/InstallFont.py", - f"{programPath}/InstallMsxml.py", - f"{programPath}/InstallNetFramework.py", - f"{programPath}/InstallOther.py", - f"{programPath}/InstallVisualCPlusPlus.py" - ] - ], - [ - "Wine 打包器(不基于生态打包脚本)", - [ - f"{programPath}/deepin-wine-packager.py", - f"{programPath}/exagear", - f"{programPath}/exagear.7z", - f"{programPath}/exagear", - f"{programPath}/wined3d.dll.so.7z", - f"{programPath}/wined3d.dll.so", - "/usr/bin/deepin-wine-package-builder", - "/usr/share/applications/spark-deepin-wine-package-builder.desktop" - ] - ], - [ - "Wine 打包器(基于生态打包脚本)", - [ - f"{programPath}/deepin-wine-packager-with-script.py", - f"{programPath}/package-script.zip", - f"{programPath}/package-script", - "/usr/bin/deepin-wine-packager-with-script", - "/usr/share/applications/spark-deepin-wine-packager-with-script.desktop" - ] - ], - [ - "Arm 64 box86 wine 运行 DLL", - [ - f"{programPath}/dlls-arm.7z", - f"{programPath}/dlls-arm", - f"{programPath}/wined3d.dll.so.7z", - f"{programPath}/wined3d.dll.so" - ] - ], - [ - "Windows 虚拟机简易安装组件", - [ - f"{programPath}/StartVM.sh", - f"{programPath}/RunVM.sh", - f"{programPath}/VM", - "/usr/share/applications/spark-deepin-wine-runner-control-vm.desktop", - "/usr/share/applications/spark-deepin-wine-runner-start-vm.desktop" - ] - ], - [ - "Wine 安装组件", - [ - f"{programPath}/AllInstall.py", - f"{programPath}/wine install", - f"{programPath}/InstallWineOnDeepin23.py", - f"{programPath}/sparkstore.list", - f"{programPath}/InstallNewWineHQ.sh", - f"{programPath}/wine", - "/usr/bin/deepin-wine-runner-wine-installer", - "/usr/bin/deepin-wine-runner-wine-install-deepin23", - "/usr/bin/deepin-wine-runner-wine-install", - "/usr/bin/deepin-wine-runner-winehq-install" - ] - ] - ]: - if not os.path.exists(i[1][0]): - continue - if input(f"是否删除组件“{i[0]}”?[Y/n]").upper() == "Y": - delProgramList.append(i) - for x in i[1]: - if x == "/*" or x == "/": # 为了防止个人疏忽,出现危险命令,所以如果有最危险的 /* 会直接跳过该命令的写入 - continue - delProramCommand += f"rm -rfv \"{x}\"\n" - if len(delProgramList) == 0: - print("您已经删除了所有可删除的组件,如果需要使用被删除的组件,请重新安装该软件安装包") - input("按回车退出") - exit() - print("开始删除") - file = open("/tmp/deepin-wine-clean.sh", "w") - file.write(delProramCommand) - file.close() - os.system("pkexec bash /tmp/deepin-wine-clean.sh") - input("按回车键退出程序") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/cleanbottle.sh b/deb/opt/apps/deepin-wine-runner/cleanbottle.sh deleted file mode 100755 index 8b60131..0000000 --- a/deb/opt/apps/deepin-wine-runner/cleanbottle.sh +++ /dev/null @@ -1,393 +0,0 @@ -#!/bin/sh -if [ $WINE = "" ]; then - WINE_CMD="deepin-wine5" -else - WINE_CMD=$WINE -fi -userdir=$USER - -remove_file() -{ - echo "============remove [$1]" - rm -rfv "$1" -} - -purge_dir() -{ - echo "=============clean [$1]" - if [ -e "$1" ]; then - find "$1" -mindepth 1 -ignore_readdir_race -exec rm -rfv {} \; - else - mkdir -p "$1" - fi -} - -clean_gecko() -{ - geckoid=$($WINE_CMD $BottleBase/windows/system32/uninstaller.exe --list | grep Gecko | cut -d"|" -f1) - echo " gecko GUID: ${geckoid}" - if [ -n "${geckoid}" ]; then - echo "uninstall gecko..." - $WINE_CMD $BottleBase/windows/system32/uninstaller.exe --remove ${geckoid} - fi - if [ -e "$BottleBase/windows/system32/gecko" ]; then - for i in $(ls "$BottleBase/windows/system32/gecko/" | grep -v plugin); do - echo "=============remove gecko dir [$i]" - rm -rfv "$BottleBase/windows/system32/gecko/$i" - done - fi -} - -clean_common_temp() -{ - remove_file "$BottleBase/../winetricks.log" - purge_dir "$BottleBase/windows/ControlPanelDB" - remove_file "$BottleBase/windows/control-panel.db" - purge_dir "$BottleBase/windows/temp" - purge_dir "$BottleBase/windows/Installer" - purge_dir "$BottleBase/users/$userdir/Temp" - purge_dir "$BottleBase/users/$userdir/Cookies" - purge_dir "$BottleBase/users/$userdir/Recent" - remove_file "$BottleBase/users/$userdir/Application Data/pcmaster" - purge_dir "$BottleBase/users/$userdir/Application Data/wine_gecko" - purge_dir "$BottleBase/users/$userdir/Local Settings/History" - purge_dir "$BottleBase/users/$userdir/Local Settings/Temporary Internet Files" - #remove_file "$BottleBase/users/${USER}" - purge_dir "$BottleBase/users/Public/Temp" - remove_file "$BottleBase/../PACKAGE_VERSION" - remove_file "$BottleBase/../update.policy" - purge_dir "$BottleBase/deepin" -} - -cleanup_aliwangwang() -{ - if [ ! -e "$BottleBase/Program Files/AliWangWang/AliIM.exe" ]; then return; fi - - echo "++++AliWangWang detected. cleaning..." - purge_dir "$BottleBase/Program Files/AliWangWang/profiles" - purge_dir "$BottleBase/Program Files/AliWangWang/new" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/aef" - purge_dir "$BottleBase/users/$userdir/Application Data/AliWangWang" - purge_dir "$BottleBase/users/$userdir/Application Data/TaobaoProtect" - purge_dir "$BottleBase/users/$userdir/Application Data/wwbizsrv" -} - -cleanup_aliworkbench() -{ - if [ ! -e "$BottleBase/Program Files/AliWorkbench/AliWorkbench.exe" ]; then return; fi - - echo "++++AliWorkbench detected. cleaning..." - purge_dir "$BottleBase/users/Public/Documents/AliWorkbench" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/aef/" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/AliWorkbench/" - purge_dir "$BottleBase/users/$userdir/Application Data/AliWorkbench/" -} - -cleanup_flash() -{ - if [ ! -e "$BottleBase/windows/system32/Macromed/Flash/" ]; then return; fi - - echo "++++flash detected. cleaning..." - remove_file "$BottleBase/users/$userdir/Application Data/Adobe" - remove_file "$BottleBase/users/$userdir/Application Data/Macromedia" - remove_file "$BottleBase/windows/system32/FlashPlayerApp.exe" - remove_file "$BottleBase/windows/ControlPanelDB/FlashPlayerCPLApp.ico" - remove_file "$BottleBase/windows/system32/FlashPlayerCPLApp.cpl" - remove_file "$BottleBase/windows/system32/Macromed/Flash/FlashInstall.log" - #remove_file "$BottleBase/windows/system32/Macromed/Flash/Flash*.dll" - #remove_file "$BottleBase/windows/system32/Macromed/Flash/Flash*.exe" -} - -cleanup_foobar2000() -{ - if [ ! -e "$BottleBase/Program Files/foobar2000/foobar2000.exe" ]; then return; fi - - echo "++++foobar2000 detected. cleaning..." - purge_dir "$BottleBase/Program Files/foobar2000/configuration" - purge_dir "$BottleBase/Program Files/foobar2000/library" - purge_dir "$BottleBase/Program Files/foobar2000/playlists-v1.3" - remove_file "$BottleBase/Program Files/foobar2000/theme.fth" -} - -cleanup_mailmaster() -{ - if [ ! -e "$BottleBase/Program Files/Netease/MailMaster/MailMaster.exe" ]; then return; fi - - echo "++++MailMaster detected. cleaning..." - remove_file "$BottleBase/Program Files/Netease/MailMaster/account" - remove_file "$BottleBase/Program Files/Netease/MailMaster/address" - remove_file "$BottleBase/Program Files/Netease/MailMaster/tmp" - remove_file "$BottleBase/Program Files/Netease/MailMaster/UpdateTemp" - remove_file "$BottleBase/Program Files/Netease/MailMaster/applog.txt" - remove_file "$BottleBase/Program Files/Netease/MailMaster/netlog.txt" - remove_file "$BottleBase/Program Files/Netease/MailMaster/global.cfg" - remove_file "$BottleBase/Program Files/Netease/MailMaster/schd.sdb" -} - -cleanup_nativeie() -{ - if [ ! -e "$BottleBase/Program Files/Internet Explorer/iexplore.exe.mui" ]; then return; fi - - echo "++++native IE detected. cleaning..." - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Microsoft/" - - remove_file "$BottleBase/windows/ie8" - remove_file "$BottleBase/windows/%DownloadedProgramFiles%" - - #remove all useless gecko files - remove_file "$BottleBase/windows/system32/gecko" -} - -cleanup_qq_before() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/QQ/Bin/QQ.exe" ]; then return; fi - - echo "++++QQ detected. cleaning..." - if [ -f "$BottleBase/Program Files/Tencent/Qzone/QQPhotoDrawUpdateSvr.exe" ]; then - remove_file "$BottleBase/Program Files/Tencent/Qzone" - fi - if [ -f "$BottleBase/Program Files/Tencent/QQGameMicro/QQGameMicro.exe" ]; then - remove_file "$BottleBase/Program Files/Tencent/QQGameMicro" - fi -} - -cleanup_qq() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/QQ/Bin/QQ.exe" ]; then return; fi - - echo "++++cleaning QQ remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQPCMgr" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQProtect" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQDownload" - remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO" - purge_dir "$BottleBase/Program Files/Tencent/QQGameMicro" - purge_dir "$BottleBase/Program Files/Tencent/QQMusic" - remove_file "$BottleBase/Program Files/Tencent/QQ/Plugin/Com.Tencent.QQPet/bin/QQPet" - remove_file "$BottleBase/Program Files/Tencent/QQ/Users" -} - -cleanup_tim() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/TIM/Bin/TIM.exe" ]; then return; fi - - echo "++++cleaning TIM remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQPCMgr" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQProtect" - purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQDownload" - remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO" - purge_dir "$BottleBase/Program Files/Tencent/QQGameMicro" - purge_dir "$BottleBase/Program Files/Tencent/QQMusic" - purge_dir "$BottleBase/Program Files/Tencent/SSPlus" - remove_file "$BottleBase/Program Files/Tencent/TIM/Users" -} - -cleanup_wxwork() -{ - if [ ! -e "$BottleBase/Program Files/WXWork/WXWork.exe" ]; then return; fi - - echo "++++cleaning WXWork remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent" -} - -cleanup_wechat() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/WeChat/WeChat.exe" ]; then return; fi - - echo "++++cleaning WeChat remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent" -} - -cleanup_baidupan() -{ - if [ ! -e "$BottleBase/Program Files/baidu/BaiduNetdisk/baidunetdisk.exe" ]; then return; fi - - echo "++++cleaning baidu net disk remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/BaiduYunGuanjia" - purge_dir "$BottleBase/users/$userdir/Application Data/BaiduYunKernel" - purge_dir "$BottleBase/BaiduNetdiskDownload" - purge_dir "$BottleBase/Program Files/baidu/Download" - remove_file "$BottleBase/Program Files/baidu/BaiduNetdisk/users" -} - -cleanup_foxmail() -{ - if [ ! -e "$BottleBase/Program Files/Foxmail 7.2/Foxmail.exe" ]; then return; fi - - echo "++++cleaning Foxmail remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/HBuilder" - remove_file "$BottleBase/Program Files/Foxmail 7.2/Storage" - remove_file "$BottleBase/Program Files/Foxmail 7.2/FMStorage.list" -} - -cleanup_hbuilder() -{ - if [ ! -e "$BottleBase/Program Files/HBuilder/HBuilder.exe" ]; then return; fi - - echo "++++cleaning HBuilder remains..." - purge_dir "$BottleBase/users/$userdir/Application Data/HBuilder" - purge_dir "$BottleBase/users/$userdir/HBuilder" - purge_dir "$BottleBase/users/$userdir/HBuilder settings" - $WINE_CMD reg DELETE "HKCU\\Software\\HBuilder" /f -} - -cleanup_thunderspeed() -{ - if [ ! -e "$BottleBase/Program Files/Thunder Network/Thunder/Program/Thunder.exe" ]; then return; fi - - echo "++++cleaning ThunderSpeed remains..." - purge_dir "$BottleBase/users/$userdir/AppData/LocalLow/Thunder Network" - purge_dir "$BottleBase/users/Public/Application Data/Thunder Network" - purge_dir "$BottleBase/users/Public/Thunder Network" - purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/Data/ThunderPush" - purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/Data/SmallHornCtrlCenter" - purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/XLApp" -} - -cleanup_qqdownload() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/QQDownload/QQDownload.exe" ]; then return; fi - - echo "++++QQDownload detected. cleaning..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO/SetupLogs" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQDownload" - #mkdir -p "$BottleBase/users/$userdir/Application Data/Tencent/QQDownload/115248456/Setting" -} - -cleanup_qqcrm() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/BizQQ/Bin/QQCRM.exe" ]; then return; fi - - echo "++++QQCRM detected. cleaning..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQCRM/STemp" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO" -} - -cleanup_qqeim() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/QQEIM/Bin/QQEIM.exe" ]; then return; fi - - echo "++++QQEIM detected. cleaning..." - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQEIM/STemp" - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO" -} - -cleanup_richez() -{ - if [ ! -e "$BottleBase/GTJA/RichEZ/TdxW.exe" ]; then return; fi - - echo "++++Richez detected. cleaning..." - remove_file "$BottleBase/GTJA/RichEZ/JBPlugins/pyerr" - remove_file "$BottleBase/GTJA/RichEZ/RichET/bin/flyingfish.log" - purge_dir "$BottleBase/GTJA/RichEZ/RichET/fflog" - purge_dir "$BottleBase/GTJA/RichEZ/RichET/tmp" - remove_file "$BottleBase/GTJA/RichEZ/T0002/customcfg_gtjazd.zip" - remove_file "$BottleBase/GTJA/RichEZ/T0002/hq_cache" - purge_dir "$BottleBase/GTJA/RichEZ/T0002/tmp" - remove_file "$BottleBase/GTJA/RichEZ/T0002/xml_cache" - remove_file "$BottleBase/GTJA/RichEZ/webs/web_cache" -} - -software_cleaner_before() -{ - cleanup_qq_before -} - -cleanup_qqlite() -{ - if [ ! -e "$BottleBase/Program Files/Tencent/QQLite/Bin/QQ.exe" ]; then return; fi - - echo "++++cleaning QQ Lite remains..." - - purge_dir "$BottleBase/users/$userdir/Application Data/Tencent" - purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent" - purge_dir "$BottleBase/users/Public/Application Data/Tencent" - remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload" - remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP" - remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO" - remove_file "$BottleBase/Program Files/Tencent/QQLite/Users" -} - -cleanup_youku() -{ - if [ ! -e "$BottleBase/Program Files/YouKu/YoukuClient/YoukuDesktop.exe" ]; then return; fi - - echo "++++cleaning YouKu remains..." - purge_dir "$BottleBase/Program Files/YouKu/YoukuClient/repaire" - purge_dir "$BottleBase/users/$userdir/Application Data/youku" - purge_dir "$BottleBase/users/$userdir/Application Data/ytmediacenter" -} - -software_cleaner() -{ - cleanup_aliwangwang - cleanup_aliworkbench - #cleanup_flash - cleanup_foobar2000 - cleanup_mailmaster - cleanup_nativeie - cleanup_qq - cleanup_tim - cleanup_qqdownload - cleanup_qqeim - cleanup_qqcrm - cleanup_richez - cleanup_qqlite - cleanup_youku - cleanup_foxmail - cleanup_thunderspeed - cleanup_wechat - cleanup_wxwork - cleanup_baidupan - cleanup_hbuilder -} - -#============================================= - -if [ -z "$1" ]; then - echo "prefix should be given" - exit 1 -fi -WINEPREFIX=$1 -BottlePath=$1 -BottleBase=${BottlePath}/drive_c - -if [ ! -d "${BottlePath}" ]; then - echo "prefix do not exists" - exit 2 -fi - -#if [ ! -e "${BottlePath}/.update-timestamp" ]; then -# echo "invalid prefix" -# exit 3 -#fi - -echo "clean $BottlePath" -export WINEPREFIX=${BottlePath} -/usr/lib/i386-linux-gnu/deepin-wine5/wineserver -k - -software_cleaner_before -clean_gecko -software_cleaner -clean_common_temp - -exit 0 diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-easy-packager.py b/deb/opt/apps/deepin-wine-runner/deepin-wine-easy-packager.py deleted file mode 100755 index df46fcd..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-easy-packager.py +++ /dev/null @@ -1,651 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import json -import time -import updatekiller -import random -import xpinyin -import traceback -import subprocess -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets - -def ShowText(text: str): - if text.replace(" ", "").replace("\n", "") == "": - return - logText.append(text.replace("\n", "")) - -def ErrorMessage(text: str): - QtWidgets.QMessageBox.critical(window, "错误", text) - -def InformationMessage(text: str): - QtWidgets.QMessageBox.information(window, "提示", text) - -questionChoose = False -questionStatus = False -def QuestionMessage(text: str): - global questionChoose - global questionStatus - # 清零 - questionChoose = False - questionStatus = False - if QtWidgets.QMessageBox.question(window, "提示", text) == QtWidgets.QMessageBox.Yes: - questionChoose = True - print(questionChoose) - questionStatus = True - return - questionChoose = False - questionStatus = True - - -def DisbledAndEnabledAll(choose: bool): - exePath.setDisabled(choose) - browserExeButton.setDisabled(choose) - buildButton.setDisabled(choose) - -# 获取用户主目录 -def get_home(): - return os.path.expanduser('~') - -def get_desktop_path(): - try: - for line in open(get_home() + "/.config/user-dirs.dirs"): # 以行来读取配置文件 - desktop_index = line.find("XDG_DESKTOP_DIR=\"") # 寻找是否有对应项,有返回 0,没有返回 -1 - if desktop_index != -1: # 如果有对应项 - break # 结束循环 - if desktop_index == -1: # 如果是提前结束,值一定≠-1,如果是没有提前结束,值一定=-1 - return -1 - else: - get = line[17:-2] # 截取桌面目录路径 - get_index = get.find("$HOME") # 寻找是否有对应的项,需要替换内容 - if get != -1: # 如果有 - get = get.replace("$HOME", get_home()) # 则把其替换为用户目录(~) - return get # 返回目录 - except: - traceback.print_exc() - return get_home() - -def CleanPressCompleteDownloadState(option): - global pressCompleteDownload - pressCompleteDownload = False - installCmpleteButton.setEnabled(True) - -# 读取 lnk 文件 -def GetLnkDesktop(path): - lnkList = [] - for i in os.listdir(path): - filePath = f"{path}/{i}" - if os.path.islink(filePath): - # 忽略 link 链接 - continue - if os.path.isdir(filePath): - lists = GetLnkDesktop(filePath) - for k in lists: - lnkList.append(k) - continue - if os.path.isfile(filePath) and os.path.splitext(filePath)[1] == ".lnk": - with open(filePath, "rb") as file: - while True: - things = file.readline().lower() - if things == b"": - break - print(things[1: -2].split("\x00".encode("gbk"))) - for k in things[1: -2].split("\x00".encode("gbk")): - if "c:".encode("gbk") in k: - print(k.decode("gbk")) - lnkList.append([filePath, k.decode("gbk")]) - return lnkList - -def ReplaceText(string: str, lists: list): - for i in lists: - string = string.replace(i[0], i[1]) - return string - -control = '''Package: @@@Package@@@ -Version: @@@Version@@@ -Architecture: i386 -Maintainer: @@@Maintainer@@@ -Depends: @@@Depends@@@ -Section: non-free/otherosfs -Priority: optional -Multi-Arch: foreign -Installed-Size: @@@Installed-Size@@@ -Description: @@@Description@@@ -''' - -info = f'''{{ - "appid": "@@@Package@@@", - "name": "@@@Name@@@", - "version": "@@@Version@@@", - "arch": ["i386"], - "permissions": {{ - "autostart": false, - "notification": false, - "trayicon": true, - "clipboard": true, - "account": false, - "bluetooth": false, - "camera": true, - "audio_record": true, - "installed_apps": false - }} -}}''' - -postrm = f"""#!/bin/bash -if [ "$1" = "remove" ] || [ "$1" = "purge" ];then - -echo "清理卸载残留" -CONTAINER_NAME="@@@Package@@@" - -if [ -z $CONTAINER_NAME ];then -echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除" -exit -fi - -/opt/deepinwine/tools/kill.sh $CONTAINER_NAME -###这里注意,如果没写CONTAINER_NAME,会把QQ杀了 - -for username in $(ls /home) - do - echo /home/$username - if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ] - then - rm -rf /home/$username/.deepinwine/$CONTAINER_NAME - fi - done -else -echo "非卸载,跳过清理" -fi""" - -runsh = f'''#!/bin/sh - -# Copyright (C) 2016 Deepin, Inc. -# -# Author: Li LongYu -# Peng Hao -# -# -# Copyright (C) 2022 The Spark Project -# -# -# Modifier shenmo -# -# -# - -#######################函数段。下文调用的额外功能会在此处声明 - -Get_Dist_Name() -{{ - if grep -Eqii "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then - DISTRO='Deepin' - elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then - DISTRO='UniontechOS' - else - DISTRO='OtherOS' - fi -}} - - -####获得发行版名称 - -#########################预设值段 - -version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }} -####用于比较版本?未实装 -BOTTLENAME="@@@Package@@@" -APPVER="@@@Version@@@" -EXEC_PATH="@@@EXEC_PATH@@@" -##### 软件在wine中的启动路径 -START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh" -export MIME_TYPE="" -#####没什么用 -export DEB_PACKAGE_NAME="@@@Package@@@" -####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关 -export APPRUN_CMD="deepin-wine6-stable" -#####wine启动指令,建议 -EXPORT_ENVS="" - -export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` - -ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" - -export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64 - -export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls" - -DISABLE_ATTACH_FILE_DIALOG="" -##默认为空。若为1,则不使用系统自带的文件选择,而是使用wine的 -##对于deepin/UOS,大部分的应用都不需要使用wine的,如果有需求(比如wine应用选择的限定种类文件系统的文管不支持) -##请填1。 -##注意:因为非DDE的环境不确定,所以默认会在非Deepin/UOS发行版上禁用这个功能。如果你确认在适配的发行版上可以正常启动,请注释或者删除下面这段 - -##############<<<<<<<<<禁用文件选择工具开始 -Get_Dist_Name -#此功能实现参见结尾函数段 -if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then -DISABLE_ATTACH_FILE_DIALOG="1" -echo "非deepin/UOS,默认关闭系统自带的文件选择工具,使用Wine的" -echo "如果你想改变这个行为,请到/opt/apps/$DEB_PACKAGE_NAME/files/$0处修改" -echo "To打包者:如果你要打开自带请注意在适配的发行版上进行测试" -echo "To用户:打包者没有打开这个功能,这证明启用这个功能可能造成运行问题。如果你要修改这个行为,请确保你有一定的动手能力" -fi -##############>>>>>>>>>禁用文件选择工具结束 - -##############<<<<<<<<<屏蔽mono和gecko安装器开始 -##默认屏蔽mono和gecko安装器 -#if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then - -#export WINEDLLOVERRIDES="mscoree,mshtml=" -#echo "为了降低打包体积,默认关闭gecko和momo,如有需要,注释此行(仅对spark-wine7-devel有效)" - -#fi -##############>>>>>>>>>屏蔽mono和gecko安装器结束 - -#########################执行段 - - - - -if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then - export ATTACH_FILE_DIALOG=1 -fi - -if [ -n "$EXPORT_ENVS" ];then - export $EXPORT_ENVS -fi - -if [ -n "$EXEC_PATH" ];then - if [ -z "${{EXEC_PATH##*.lnk*}}" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@" - else - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" - fi -else - $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" -fi''' - -desktopFile = f'''#!/usr/bin/env xdg-open -[Desktop Entry] -Encoding=UTF-8 -Type=Application -X-Created-By=@@@Maintainer@@@ -Icon=@@@Icon@@@ -Exec="/opt/apps/@@@Package@@@/files/run.sh" -Name=@@@Name@@@ -Comment=@@@Description@@@ -MimeType= -GenericName=@@@Package@@@ -Terminal=false -StartupNotify=false''' - -def getFileFolderSize(fileOrFolderPath): - """get size for file or folder""" - totalSize = 0 - if not os.path.exists(fileOrFolderPath): - return totalSize - if os.path.isfile(fileOrFolderPath): - totalSize = os.path.getsize(fileOrFolderPath) # 5041481 - return totalSize - if os.path.isdir(fileOrFolderPath): - with os.scandir(fileOrFolderPath) as dirEntryList: - for curSubEntry in dirEntryList: - curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name) - if curSubEntry.is_dir(): - curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007 - totalSize += curSubFolderSize - elif curSubEntry.is_file(): - curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891 - totalSize += curSubFileSize - return totalSize - - -def WriteTxt(path, things): - with open(path, "w") as file: - file.write(things) - -def ReadTxt(path): - things = "" - with open(path, "r") as file: - things = file.read() - return things - -def GetEXEVersion(exePath): - versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt" - if os.system(f"deepin-wine6-stable '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'"): - return "1.0.0" - try: - exeVersion = ReadTxt(versionPath).replace("\n", "") - if exeVersion.replace(" ", "") == "": - return "1.0.0" - return exeVersion - except: - traceback.print_exc() - return "1.0.0" - -def StrToByteToStr(text: str): - lists = text.split("\\x") - for i in range(len(lists)): - lists[i] - return text - -def UnUseUpperCharPath(path: str): - pathList = [] - lowerList = path.split("/")[1:] - for i in lowerList: - path = "/" + "/".join(pathList) - before = len(pathList) - for k in os.listdir(path): - if k.lower() == i.lower(): - pathList.append(k) - break - end = len(pathList) - if before == end: - raise OSError("文件路径不存在") - return "/" + "/".join(pathList) - -def ReadMe(): - QtWidgets.QMessageBox.information(window, "提示", """1、目前只支持打包 X86 架构的 deb 包,暂未支持 arm; -2、需要区分要打包的程序是绿色软件还是单文件安装包,两个对应的打包方式不相同; -3、打包绿色软件时为尽可能减小程序体积,请将绿化后的程序(或程序文件夹)单独拷贝到干净的目录后再浏览选择主程序打包; -4、打包详情: - ①调用 Wine:Deepin Wine6 Stable - ②调用 Helper:Spark Wine Helper - ③有卸载自动移除容器脚本""") - - -class RunThread(QtCore.QThread): - showLogText = QtCore.pyqtSignal(str) - error = QtCore.pyqtSignal(str) - info = QtCore.pyqtSignal(str) - question = QtCore.pyqtSignal(str) - disbledAll = QtCore.pyqtSignal(bool) - cleanPressState = QtCore.pyqtSignal(bool) - def RunCommand(self, command): - res = subprocess.Popen([command], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - self.showLogText.emit(text) - print(text, end="") - - def __init__(self) -> None: - super().__init__() - - def GetEXEVersion(self, exePath): - versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt" - self.RunCommand(f"deepin-wine6-stable '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'") - try: - exeVersion = ReadTxt(versionPath).replace("\n", "") - if exeVersion.replace(" ", "") == "": - return "1.0.0" - return exeVersion - except: - traceback.print_exc() - return "1.0.0" - - def QuestionMsg(self, text): - global questionStatus - questionStatus = False - self.question.emit(text) - while not questionStatus: - time.sleep(0.1) - print(questionChoose) - return questionChoose - - def run(self): - try: - self.disbledAll.emit(True) - if not self.QuestionMsg("在此过程中,需要回答一系列的问题以进行打包,点击确定继续"): - self.disbledAll.emit(False) - return - bottlePath = f"/tmp/deepin-wine-runner-bottle-{random.randint(0, 10000)}" - # 清空容器以保证能正常使用 - if os.path.exists(bottlePath): - self.RunCommand(f"rm -rfv '{bottlePath}'") - ############# 后面将全部调用 deepin wine6 stable 进行操作 - exeName = os.path.basename(exePath.text()) - # 暂定 - packageName = xpinyin.Pinyin().get_pinyin(os.path.splitext(exeName)[0].replace(" ", ""), "").lower().replace(" ", "").replace("_", ".").replace("-", ".").replace("..", ".") - - if " " in packageName: - packageName = "" - for i in os.path.splitext(exeName)[0].split(" "): - packageName += xpinyin.Pinyin().get_pinyin(i).lower().replace(" ", "").replace("_", ".").replace("-", ".").replace("..", ".") + "." - print(packageName) - packageName = packageName[:-1] - debPackageName = "com." + packageName + ".spark" - debPackageVersion = "1.0.0" - programIconPath = f"/opt/apps/{debPackageName}/entries/icons/hicolor/scalable/apps/{debPackageName}.png" - debMaintainer = os.getlogin() - debBuildPath = f"/tmp/deepin-wine-packager-builder-{debPackageName}-{random.randint(0, 1000)}" - bottlePackagePath = f"{debBuildPath}/opt/apps/{debPackageName}/files/files.7z" - desktopPath = get_desktop_path() - ############## 运行 EXE - if self.QuestionMsg("请问此可执行文件是安装包还是绿色软件?是安装包请按 Yes,绿色软件按 No"): - # 清空无益处的 lnk 文件 - lnkPath = f"{bottlePath}/drive_c/ProgramData/Microsoft/Windows/Start Menu/Programs" - self.RunCommand(f"rm -rfv '{lnkPath}'") - self.RunCommand(f"mkdir -pv '{bottlePath}'") - self.RunCommand(f"chmod 777 -Rv '{bottlePath}'") - # 禁止生成 .desktop 文件 - self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable 'reg' 'add' 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v winemenubuilder.exe '/f'") - # 写入字体 - self.RunCommand(f"WINEPREFIX='{bottlePath}' '{programPath}/AutoShell/command/installfont' 1") - # 安装包 - self.info.emit("请在运行完安装程序后按下打包器主界面的“安装程序执行完成按钮”以进行下一步操作") - global pressCompleteDownload - pressCompleteDownload = False - installCmpleteButton.setEnabled(True) - self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable '{exePath.text()}' &") # 非堵塞线程 - - # 安装锁,锁解除后才可继续 - while not pressCompleteDownload: - time.sleep(0.1) - # 杀死容器内应用 - self.RunCommand(f"'{programPath}/kill.sh' '{os.path.basename(bottlePath)}'") - # 识别 lnk - lnkList = GetLnkDesktop(lnkPath) - if len(lnkList) <= 0: - self.error.emit("无法识别到任何 lnk 快捷方式") - self.RunCommand(f"rm -rfv '{debBuildPath}' > /dev/null") - self.RunCommand(f"rm -rfv '{bottlePath}' > /dev/null") - self.disbledAll.emit(False) - return - # 选择最优 lnk - secondChooseList = [] - for k in lnkList: - lnkPath = k[0].lower() - lnkExePath = k[1].lower() - if "卸载" in lnkPath or "uninstall" in lnkPath or "update" in lnkPath or "网页" in lnkPath or "websize" in lnkPath or not ".exe" in lnkExePath: - continue - secondChooseList.append(k) - if len(secondChooseList) <= 0: - secondChooseList = lnkList - rightLnk = secondChooseList[0] - miniLenge = len(rightLnk[1]) - for k in secondChooseList: - # 择优选择路径最短一项 - if len(k[1]) < miniLenge: - rightLnk = k - miniLenge = len(rightLnk[1]) - debPackageName = "com." + xpinyin.Pinyin().get_pinyin(os.path.splitext(os.path.basename(rightLnk[0]))[0].replace(" ", "")).lower().replace("--", "-").replace(" ", "").replace("_", "-").replace("-", ".") + ".spark" - programIconPath = f"/opt/apps/{debPackageName}/entries/icons/hicolor/scalable/apps/{debPackageName}.png" - bottlePackagePath = f"{debBuildPath}/opt/apps/{debPackageName}/files/files.7z" - self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/icons/hicolor/scalable/apps/'") - folderExePath = os.path.dirname(rightLnk[1].replace("\\", "/").replace("c:/", bottlePath)) - exePathInBottle = rightLnk[1] - exeName = os.path.splitext(os.path.basename(folderExePath))[0] - exePathInSystem = rightLnk[1].replace("\\", "/").replace("c:", f"{bottlePath}/drive_c") - debPackageVersion = self.GetEXEVersion(exePathInSystem) - cpNow = False - for i in iconList: - path = i[1].replace("wineBottonPath", bottlePath).lower() - if path == exePathInSystem.lower(): - self.RunCommand(f"cp -rv '{programPath}/Icon/{i[0]}.svg' '{debBuildPath}/{programIconPath}'") - exeName = i[0] - cpNow = True - break - if not cpNow: - self.RunCommand(f"'{programPath}/wrestool' '{UnUseUpperCharPath(exePathInSystem)}' -x -t 14 > '{debBuildPath}/{programIconPath}'") - else: - #/home/gfdgd_xi/Desktop/新建文件夹1/BeCyIconGrabber.exe - # 绿色软件 - self.RunCommand(f"mkdir -pv '{bottlePath}'") - self.RunCommand(f"chmod 777 -Rv '{bottlePath}'") - self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable exit") - folderExePath = os.path.dirname(exePath.text()) - exePathInBottle = f"c:/Program Files/{os.path.basename(folderExePath)}/{exeName}" - exeName = os.path.splitext(os.path.basename(os.path.basename(exePath.text())))[0] - self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/icons/hicolor/scalable/apps/'") - self.RunCommand(f"'{programPath}/wrestool' '{exePath.text()}' -x -t 14 > '{debBuildPath}/{programIconPath}'") - # 拷贝文件到容器 - self.RunCommand(f"cp -rv '{folderExePath}' '{bottlePath}/drive_c/Program Files'") - debPackageVersion = self.GetEXEVersion(exePath.text()) - debDescription = f"{exeName} By Deepin Wine 6 Stable And Build By Wine Runner Easy Packager" - debDepends = "deepin-wine6-stable, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" - self.RunCommand(f"mkdir -pv '{debBuildPath}/DEBIAN'") - self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/files'") - self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/applications'") - #self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/icons/hicolor/scalable/apps/'") - ############ 处理容器 - # 对用户目录进行处理 - os.chdir(bottlePath) - self.RunCommand("sed -i \"s#$USER#@current_user@#\" ./*.reg") - os.chdir(f"{bottlePath}/drive_c/users") - # 如果缩放文件 scale.txt 存在,需要移除以便用户自行调节缩放设置 - if os.path.exists(f"{bottlePath}/scale.txt"): - self.RunCommand(f"rm -rfv '{bottlePath}/scale.txt'") - # 删除因为脚本失误导致用户目录嵌套(如果存在) - if os.path.exists(f"{bottlePath}/drive_c/users/@current_user@/@current_user@"): - self.RunCommand(f"rm -rfv '{bottlePath}/drive_c/users/@current_user@/@current_user@'") - self.RunCommand(f"mv -fv '{os.getlogin()}' @current_user@") - self.RunCommand(f"rm -fv '{bottlePath}/drive_c/users/@current_user@/我的'*") - self.RunCommand(f"rm -fv '{bottlePath}/drive_c/users/@current_user@/My '*") - self.RunCommand(f"rm -fv '{bottlePath}/drive_c/users/@current_user@/Desktop'") - self.RunCommand(f"rm -fv '{bottlePath}/drive_c/users/@current_user@/Downloads'") - self.RunCommand(f"rm -fv '{bottlePath}/drive_c/users/@current_user@/Templates'") - ########### 打包容器 - self.RunCommand(f"7z a '{bottlePackagePath}' '{bottlePath}/'*") - ########### 生成文件内容 - buildProgramSize = getFileFolderSize(debBuildPath) / 1000 - replaceMap = [ - ["@@@Package@@@", debPackageName], - ["@@@Version@@@", debPackageVersion], - ["@@@Maintainer@@@", debMaintainer], - ["@@@Depends@@@", debDepends], - ["@@@Description@@@", debDescription], - ["@@@Installed-Size@@@", str(buildProgramSize)], - ["@@@Name@@@", exeName], - ["@@@EXEC_PATH@@@", exePathInBottle], - ["@@@Icon@@@", programIconPath] - ] - debControl = ReplaceText(control, replaceMap) - debPostrm = ReplaceText(postrm, replaceMap) - debInfo = ReplaceText(info, replaceMap) - debRunSh = ReplaceText(runsh, replaceMap) - debDesktop = ReplaceText(desktopFile, replaceMap) - ########### 写入文件 - WriteTxt(f"{debBuildPath}/opt/apps/{debPackageName}/entries/applications/{debPackageName}.desktop", debDesktop) - WriteTxt(f"{debBuildPath}/opt/apps/{debPackageName}/files/run.sh", debRunSh) - WriteTxt(f"{debBuildPath}/opt/apps/{debPackageName}/info", debInfo) - WriteTxt(f"{debBuildPath}/DEBIAN/control", debControl) - WriteTxt(f"{debBuildPath}/DEBIAN/postrm", debPostrm) - ########### 赋值权限 - self.RunCommand(f"chmod -Rv 644 '{debBuildPath}/opt/apps/{debPackageName}/info'") - self.RunCommand(f"chmod -Rv 0755 '{debBuildPath}/DEBIAN'") - self.RunCommand(f"chmod -Rv 755 '{debBuildPath}/opt/apps/{debPackageName}/files/'*.sh") - self.RunCommand(f"chmod -Rv 755 '{debBuildPath}/opt/apps/{debPackageName}/entries/applications/'*.desktop") - ########### 打包 deb - print(debPackageVersion) - self.RunCommand(f"dpkg -b '{debBuildPath}' '{desktopPath}/{debPackageName}_{debPackageVersion}_i386.deb'") - self.info.emit("打包完成!") - self.disbledAll.emit(False) - ########### 移除临时文件 - self.RunCommand(f"rm -rfv '{debBuildPath}' > /dev/null") - self.RunCommand(f"rm -rfv '{bottlePath}' > /dev/null") - except: - self.RunCommand(f"rm -rfv '{debBuildPath}' > /dev/null") - self.RunCommand(f"rm -rfv '{bottlePath}' > /dev/null") - # 若打包出现任何错误 - traceback.print_exc() - self.error.emit(f"打包错误,详细详细如下:{traceback.format_exc()}") - self.showLogText.emit(traceback.format_exc()) - self.disbledAll.emit(False) - -#/home/gfdgd_xi/Downloads/XPcalc.exe -def RunBuildThread(): - global buildThread - buildThread = RunThread() - buildThread.showLogText.connect(ShowText) - buildThread.error.connect(ErrorMessage) - buildThread.info.connect(InformationMessage) - buildThread.question.connect(QuestionMessage) - buildThread.disbledAll.connect(DisbledAndEnabledAll) - buildThread.cleanPressState.connect(CleanPressCompleteDownloadState) - logText.clear() - buildThread.start() - -pressCompleteDownload = False - -def PressCompleteDownload(): - global pressCompleteDownload - pressCompleteDownload = True - installCmpleteButton.setDisabled(True) - -def BrowserExe(): - filePath = QtWidgets.QFileDialog.getOpenFileName(window, "选择 exe", get_home(), "可执行文件(*.exe);;所有文件(*.*)") - if filePath[0] != "" or filePath[0] != None: - exePath.setText(filePath[0]) - -if __name__ == "__main__": - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - iconPath = "{}/deepin-wine-runner.svg".format(programPath) - information = json.loads(ReadTxt(f"{programPath}/information.json")) - iconListUnBuild = json.loads(ReadTxt(f"{programPath}/IconList.json"))[0] - iconList = json.loads(ReadTxt(f"{programPath}/IconList.json"))[1] - for i in iconListUnBuild: - iconList.append(i) - app = QtWidgets.QApplication(sys.argv) - version = information["Version"] - window = QtWidgets.QMainWindow() - widget = QtWidgets.QWidget() - layout = QtWidgets.QGridLayout() - exePath = QtWidgets.QLineEdit() - browserExeButton = QtWidgets.QPushButton("浏览……") - logText = QtWidgets.QTextBrowser() - logText.setStyleSheet(""" - background-color: black; - color: white; - """) - controlLayout = QtWidgets.QHBoxLayout() - buildButton = QtWidgets.QPushButton("现在打包……") - installCmpleteButton = QtWidgets.QPushButton("安装程序执行完成") - helpButton = QtWidgets.QPushButton("帮助") - browserExeButton.clicked.connect(BrowserExe) - buildButton.clicked.connect(RunBuildThread) - installCmpleteButton.clicked.connect(PressCompleteDownload) - helpButton.clicked.connect(ReadMe) - installCmpleteButton.setDisabled(True) - controlLayout.addWidget(buildButton) - controlLayout.addWidget(installCmpleteButton) - controlLayout.addWidget(helpButton) - layout.addWidget(QtWidgets.QLabel("选择 EXE:"), 0, 0) - layout.addWidget(exePath, 0, 1) - layout.addWidget(browserExeButton, 0, 2) - layout.addLayout(controlLayout, 1, 1) - layout.addWidget(logText, 2, 0, 1, 3) - widget.setLayout(layout) - window.setCentralWidget(widget) - window.setWindowTitle(f"Wine 运行器 {version}——简易打包器") - try: - exePath.setText(sys.argv[1]) - except: - pass - window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1)) - window.show() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager-with-script.py b/deb/opt/apps/deepin-wine-runner/deepin-wine-packager-with-script.py deleted file mode 100755 index a8ae14c..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager-with-script.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:1.6.1 -# 更新时间:2022年07月14日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 tkinter 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import json -import updatekiller -import threading -import PyQt5.QtWidgets as QtWidgets - -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -def Unzip(): - os.system("mkdir -p ~") - os.chdir(f"{homePath}") - os.system(f"unzip -o \"{programPath}/package-script.zip\"") - print("Unzip Done") - ReStartProgram() - -# 重启本应用程序 -def ReStartProgram(): - python = sys.executable - os.execl(python, python, * sys.argv) - -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -homePath = os.path.expanduser('~') -information = json.loads(readtxt(f"{programPath}/information.json")) -version = information["Version"] -if not os.path.exists(f"{homePath}/package-script") or not json.loads(readtxt(f"{homePath}/package-script/information.json"))["Version"] == version: - app = QtWidgets.QApplication(sys.argv) - widget = QtWidgets.QWidget() - widgetLayout = QtWidgets.QVBoxLayout() - widget.setWindowTitle("解压中") - widgetLayout.addWidget(QtWidgets.QLabel("正在解压所需程序,请稍后……")) - progress = QtWidgets.QProgressBar() - progress.setMaximum(0) - progress.setMinimum(0) - progress.update() - widgetLayout.addWidget(progress) - widget.setLayout(widgetLayout) - widget.show() - # 解压流程 - QtWidgets.QProgressDialog(None) - t = threading.Thread(target=Unzip) - t.start() - sys.exit(app.exec_()) -os.chdir(f"{homePath}/package-script") -os.system("./package.py") -print("End") diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py b/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py deleted file mode 100755 index ee0025b..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py +++ /dev/null @@ -1,2333 +0,0 @@ -#!/usr/bin/env python3 -######################################################################### -# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布 -# 版本:2.0.1 -# 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 PyQt5 构建 -######################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import time -import json -import shutil -import random -import pathlib -import updatekiller -import threading -import traceback -import subprocess -import webbrowser -from PIL import Image -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets -from trans import * - -################# -# 程序所需事件 -################# - -def button1_cl(): - path = QtWidgets.QFileDialog.getExistingDirectory(widget, transla.transe("U", "选择 wine 容器"), f"{get_home()}/.deepinwine") - if path != "": - e6_text.setText(path) - -def button2_cl(number): - path = QtWidgets.QFileDialog.getOpenFileName(widget, transla.transe("U", "选择图标文件"), get_home(), "PNG图标(*.png);;SVG图标(*.svg);;全部文件(*.*)")[0] - if path != "": - mapLink[number].setText(path) - -def button4_cl(): - path = QtWidgets.QFileDialog.getSaveFileName(widget, transla.transe("U", "保存 deb 包"), get_home(), "deb 文件(*.deb);;所有文件(*.*)", "{}_{}_all.deb".format(e1_text.text(), e2_text.text()))[0] - if path != "": - e12_text.setText(path) - -def disabled_or_NORMAL_all(choose): - choose = not choose - disabledMono.setDisabled(choose) - e1_text.setDisabled(choose) - e2_text.setDisabled(choose) - e3_text.setDisabled(choose) - e4_text.setDisabled(choose) - e5_text.setDisabled(choose) - e6_text.setDisabled(choose) - e7_text.setDisabled(choose) - e8_text.setDisabled(choose) - e9_text.setDisabled(choose) - e10_text.setDisabled(choose) - e12_text.setDisabled(choose) - e15_text.setDisabled(choose) - button1.setDisabled(choose) - button2.setDisabled(choose) - button4.setDisabled(choose) - button5.setDisabled(choose) - option1_text.setDisabled(choose) - desktopIconTab.setDisabled(choose) - build7z.setDisabled(choose) - chooseWineHelperValue.setDisabled(choose) - wineVersion.setDisabled(choose) - debArch.setDisabled(choose) - rmBash.setDisabled(choose) - cleanBottonByUOS.setDisabled(choose) - installDeb.setDisabled(choose) - useInstallWineArch.setDisabled(choose) - buildDebDir.setDisabled(choose) - debDepends.setDisabled(choose) - debRecommend.setDisabled(choose) - #if not choose: - # ChangeArchCombobox() - # ChangeWine() - -class QT: - thread = None - -savePath = "" -savePathBlock = False -def SavePathGet(temp): - global savePath - global savePathBlock - savePath = QtWidgets.QFileDialog.getExistingDirectory(widget, "选择模板生成位置", get_home()) - savePathBlock = True - -def ErrorMsg(info): - QtWidgets.QMessageBox.critical(widget, "错误", info) - -def InfoMsg(info): - QtWidgets.QMessageBox.information(widget, "提示", info) - -class build7z_threading(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - label = QtCore.pyqtSignal(str) - getSavePath = QtCore.pyqtSignal(str) - errorMsg = QtCore.pyqtSignal(str) - infoMsg = QtCore.pyqtSignal(str) - disabled_or_NORMAL_all = QtCore.pyqtSignal(bool) - build = "" - def __init__(self, build) -> None: - super().__init__() - self.build = build - - def run_command(self, command): - res = subprocess.Popen([command], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # 实时读取程序返回 - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - print(text, end="") - self.signal.emit(text) - - def run(self): - path = self.build - try: - self.disabled_or_NORMAL_all.emit(False) - if e6_text.text() == "/": - b = e6_text.text()[:-1] - else: - b = e6_text.text() - debInformation = [ - { - # I386 wine 打包配置文件 - "Wine": wine[wineVersion.currentText()] - }, - { - # ARM64 通用 wine 打包配置文件 - "Wine": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ", - } - ] - if not path[1] or path[0] == "": - return - debPackagePath = path[0] - Build7z(b, self, debInformation, debPackagePath) - self.infoMsg.emit("打包完成!") - self.disabled_or_NORMAL_all.emit(True) - except: - traceback.print_exc() - self.errorMsg.emit(traceback.format_exc()) - - -def Build7z(b, self, debInformation, debPackagePath): - ############### - # 设置容器 - ############### - self.label.emit("正在设置 wine 容器") - if e6_text.text()[-3: ] != ".7z" and debArch.currentIndex() != 2: - os.chdir(programPath) - if cleanBottonByUOS.isChecked(): - self.run_command(f"WINE='{debInformation[debArch.currentIndex()]['Wine']}' '{programPath}/cleanbottle.sh' '{b}'") - os.chdir(b) - # 对用户目录进行处理 - self.run_command("sed -i \"s#$USER#@current_user@#\" ./*.reg") - os.chdir(f"{b}/drive_c/users") - if os.path.exists(f"{b}/drive_c/users/@current_user@"): - self.run_command(f"rm -rfv '{b}/drive_c/users/@current_user@'") - self.run_command(f"mv -fv '{os.getlogin()}' @current_user@") - # 如果缩放文件 scale.txt 存在,需要移除以便用户自行调节缩放设置 - if os.path.exists(f"{b}/scale.txt"): - os.remove(f"{b}/scale.txt") - # 删除因为脚本失误导致用户目录嵌套(如果存在) - if os.path.exists(f"{b}{b}/drive_c/users/@current_user@/@current_user@"): - shutil.rmtree(f"{b}{b}/drive_c/users/@current_user@/@current_user@") - # 删除无用的软链 - self.run_command(f"rm -fv '{b}/drive_c/users/@current_user@/我的'*") - self.run_command(f"rm -fv '{b}/drive_c/users/@current_user@/My '*") - self.run_command(f"rm -fv '{b}/drive_c/users/@current_user@/Desktop'") - self.run_command(f"rm -fv '{b}/drive_c/users/@current_user@/Downloads'") - self.run_command(f"rm -fv '{b}/drive_c/users/@current_user@/Templates'") - elif debArch.currentIndex() == 2 and e6_text.text()[-3: ] != ".7z": - os.chdir(b) - # 对用户目录进行处理 - self.run_command("sed -i \"s#$USER#crossover#\" ./*.reg") - os.chdir(f"{b}/drive_c/users") - if os.path.exists(f"{b}/drive_c/users/crossover"): - self.run_command(f"rm -rfv '{b}/drive_c/users/crossover'") - self.run_command(f"mv -fv '{os.getlogin()}' crossover") - # 删除因为脚本失误导致用户目录嵌套(如果存在) - if os.path.exists(f"{b}{b}/drive_c/users/crossover/crossover"): - shutil.rmtree(f"{b}{b}/drive_c/users/crossover/crossover") - # 删除无用的软链 - self.run_command(f"rm -fv '{b}/drive_c/users/crossover/我的'*") - self.run_command(f"rm -fv '{b}/drive_c/users/crossover/My '*") - self.run_command(f"rm -fv '{b}/drive_c/users/crossover/Desktop'") - self.run_command(f"rm -fv '{b}/drive_c/users/crossover/Downloads'") - self.run_command(f"rm -fv '{b}/drive_c/users/crossover/Templates'") - os.chdir(programPath) - ############### - # 压缩容器 - ############### - self.label.emit("正在打包 wine 容器") - # 都有 7z 了为什么要打包呢? - if e6_text.text()[-3: ] == ".7z": - shutil.copy(e6_text.text(), f"{debPackagePath}/opt/apps/{e1_text.text()}/files/files.7z") - else: - if debArch.currentIndex() == 2: - # Crossover 包直接拷贝容器即可,无需打包 7z - os.system(f"cp -rv '{b}' '{debPackagePath}/opt/cxoffice/support/{e5_text.text()}'") - return - if debPackagePath[-3: ] == ".7z": - self.run_command("7z a '{}' '{}/'*".format(debPackagePath, b)) - else: - self.run_command("7z a {}/opt/apps/{}/files/files.7z '{}/'*".format(debPackagePath, e1_text.text(), b)) - - -def Build7zButton_Clicked(): - path = QtWidgets.QFileDialog.getSaveFileName(window, "选择保存位置", get_home(), "7z文件(*.7z);;所有文件(*.*)") - print(path) - QT.thread = build7z_threading(path) - QT.thread.signal.connect(chang_textbox1_things) - QT.thread.label.connect(label13_text_change) - QT.thread.getSavePath.connect(SavePathGet) - QT.thread.errorMsg.connect(ErrorMsg) - QT.thread.infoMsg.connect(InfoMsg) - QT.thread.disabled_or_NORMAL_all.connect(disabled_or_NORMAL_all) - QT.thread.start() - -def make_deb(build=False): - global bottleNameLock - clean_textbox1_things() - disabled_or_NORMAL_all(False) - badComplete = False - # 规范检测 - if e1_text.text().lower() != e1_text.text(): - if QtWidgets.QMessageBox.warning(window, "提示", f"包名 {e1_text.text()} 似乎不符合规范,可能会导致打包后的包无法投稿到应用商店,是否继续?\n可参考 deb 安装包打包标准", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - label13_text_change("用户已取消") - return - for i in range(len(iconUiList)): - if os.path.splitext(iconUiList[i][4].text())[1] == ".ico": - if QtWidgets.QMessageBox.warning(window, "提示", f"图标 {iconUiList[i][4].text()} 似乎为 ico 格式,可能会导致打包后的程序在启动器的图标无法正常显示,是否继续?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - label13_text_change("用户已取消") - return - if os.path.exists(iconUiList[i][0].text()) and not "c:" in iconUiList[i][0].text().lower(): - if not e6_text.text() in iconUiList[i][0].text(): - if QtWidgets.QMessageBox.warning(window, "提示", f"路径 {iconUiList[i][0].text()} 似乎不符合规范且不位于容器内,可能会导致打包后的程序无法运行,是否继续?\n可参考 Windows 下的文件路径", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - label13_text_change("用户已取消") - return - if QtWidgets.QMessageBox.warning(window, "提示", f"路径 {iconUiList[i][0].text()} 似乎不符合规范,可能会导致打包后的程序无法运行,是否继续?\n可参考 Windows 下的文件路径", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - label13_text_change("用户已取消") - return - for k in [0, 3]: - if iconUiList[i][k].text().replace(" ", "") == "": - badComplete = True - if badComplete or e1_text.text() == "" or e2_text.text() == "" or e3_text.text() == "" or e4_text.text() == "" or e5_text.text() == "" or e6_text.text() == "" or e7_text.text() == "" or e8_text.text() == "" or e12_text.text() == "": - QtWidgets.QMessageBox.critical(widget, "错误", "必填信息没有填写完整,无法继续构建 deb 包") - disabled_or_NORMAL_all(True) - label13_text_change("必填信息没有填写完整,无法继续构建 deb 包") - return - if QtWidgets.QMessageBox.question(widget, transla.transe("U", "提示"), transla.transe("U", "打包将会改动现在选择的容器,是否继续?")) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - return - # 警告信息 - if os.path.exists(e7_text.text()): - if QtWidgets.QMessageBox.warning(window, "警告", "输入的路径似乎是一个绝对路径\n不建议打包绝对路径,建议是 Wine 容器内路径\n是否继续打包?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - return - if e7_text.text()[:2].lower() == "c:" and not os.path.exists("{}/drive_c/{}".format( - e6_text.text(), - e7_text.text()[3:].replace("\\", '/'))): - if QtWidgets.QMessageBox.warning(window, "警告", "输入的路径似乎在 Wine 容器不存在(如果只是大小写错误导致的误判,请忽略)\n是否继续打包?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No: - disabled_or_NORMAL_all(True) - return - #thread = threading.Thread(target=make_deb_threading) - QT.thread = make_deb_threading(build) - QT.thread.signal.connect(chang_textbox1_things) - QT.thread.label.connect(label13_text_change) - QT.thread.getSavePath.connect(SavePathGet) - QT.thread.errorMsg.connect(ErrorMsg) - QT.thread.infoMsg.connect(InfoMsg) - QT.thread.disabled_or_NORMAL_all.connect(disabled_or_NORMAL_all) - bottleNameLock = False - QT.thread.start() - #thread.start() - - -def label13_text_change(thing): - label13_text.setText(f"

当前 deb 打包情况:{thing}

") - -def ReplaceText(string: str, lists: list): - for i in lists: - string = string.replace(i[0], i[1]) - return string - -class make_deb_threading(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - label = QtCore.pyqtSignal(str) - getSavePath = QtCore.pyqtSignal(str) - errorMsg = QtCore.pyqtSignal(str) - infoMsg = QtCore.pyqtSignal(str) - disabled_or_NORMAL_all = QtCore.pyqtSignal(bool) - build = False - def __init__(self, build) -> None: - super().__init__() - self.build = build - - def run_command(self, command): - res = subprocess.Popen([command], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # 实时读取程序返回 - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - print(text, end="") - self.signal.emit(text) - - def run(self): - ##################################### - # 程序创建的 deb 构建临时文件夹目录树: - # /XXX - # ├── DEBIAN - # │ ├── control - # │ └── postrm - # └── opt - # └── apps - # └── XXX - # ├── entries - # │ ├── applications - # │ │ └── XXX.desktop - # │ └── icons - # │ └── hicolor - # │ └── scalable - # │ └── apps - # │ └── XXX.png(XXX.svg) - # ├── files - # │ ├── files.7z - # │ └── run.sh - # └── info - # - # 11 directories, 7 files - ##################################### - try: - ##################### - # 判断文件是否存在 - ##################### - self.label.emit("正在检查文件是否存在并为后面步骤准备……") - a = "" - if e6_text.text() == "/": - b = e6_text.text()[:-1] - else: - b = e6_text.text() - if desktopIconTab.count() <= 1: - if e9_text.text() != "": - # 获取图片格式(不太准) - try: - im = Image.open(e9_text.text()) - imms = im.format.lower() - except: # 未知(就直接设置为 svg 后缀) - imms = "svg" - a = "/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(e1_text.text(), e1_text.text(), imms) - if not os.path.exists(e9_text.text()): - self.errorMsg.emit("图标的路径填写错误,无法进行构建 deb 包") - self.disabled_or_NORMAL_all.emit(True) - self.label.emit("图标的路径填写错误,无法进行构建 deb 包") - return - else: - a = [] - for i in iconUiList: - if i[4].text != "": - # 获取图片格式(不太准) - try: - im = Image.open(e9_text.text()) - imms = im.format.lower() - except: - imms = ".svg" - a.append("/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}-{}.{}".format(e1_text.text(), e1_text.text(), os.path.splitext(os.path.basename(i[0].text().replace("\\", "/")))[0], imms)) - if not os.path.exists(i[4].text()): - self.errorMsg.emit("图标的路径填写错误,无法进行构建 deb 包") - self.disabled_or_NORMAL_all.emit(True) - self.label.emit("图标的路径填写错误,无法进行构建 deb 包") - return - if not os.path.exists(e6_text.text()): - print("aa") - self.errorMsg.emit("路径填写错误,无法继续构建 deb 包") - print("aaa1") - self.disabled_or_NORMAL_all.emit(True) - self.label.emit("容器路径填写错误,无法进行构建 deb 包") - print("bbb") - return - debInformation = [ - { - # I386 wine 打包配置文件 - "Wine": wine[wineVersion.currentText()], - "Architecture": debFirstArch.currentText(), - "Depends": [ - f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei", - f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" - ][int(chooseWineHelperValue.isChecked())], - "postinst": "", - "postrm": ["", f"""#!/bin/bash -if [ "$1" = "remove" ] || [ "$1" = "purge" ];then - -echo "清理卸载残留" -CONTAINER_NAME="{e5_text.text()}" - -if [ -z $CONTAINER_NAME ];then -echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除" -exit -fi - -/opt/deepinwine/tools/kill.sh $CONTAINER_NAME -###这里注意,如果没写CONTAINER_NAME,会把QQ杀了 - -for username in $(ls /home) - do - echo /home/$username - if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ] - then - rm -rf /home/$username/.deepinwine/$CONTAINER_NAME - fi - done -else -echo "非卸载,跳过清理" -fi"""][int(rmBash.isChecked())], - "run.sh": [ - f"""#!/bin/sh - -# Copyright (C) 2016 Deepin, Inc. -# -# Author: Li LongYu -# Peng Hao - -version_gt() {{ test "$(echo "$@" | tr " " "\\n" | sort -V | head -n 1)" != "$1"; }} - -BOTTLENAME="@@@BOTTLENAME@@@" -APPVER="@@@APPVER@@@" -EXEC_PATH="@@@EXEC_PATH@@@" -START_SHELL_PATH="/opt/deepinwine/tools/run_v4.sh" -export MIME_TYPE="" -export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@" -export APPRUN_CMD="@@@APPRUN_CMD@@@" -DISABLE_ATTACH_FILE_DIALOG="" -EXPORT_ENVS="" - -export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` - -ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" - -export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64 - -export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls" - -if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then - export ATTACH_FILE_DIALOG=1 -fi - -if [ -n "$EXPORT_ENVS" ];then - export $EXPORT_ENVS -fi - -if [ -n "$EXEC_PATH" ];then - if [ -z "${{EXEC_PATH##*.lnk*}}" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@" - else - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" - fi -else - $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" -fi""", - f"""#!/bin/sh - -# Copyright (C) 2016 Deepin, Inc. -# -# Author: Li LongYu -# Peng Hao -# -# -# Copyright (C) 2022 The Spark Project -# -# -# Modifier shenmo -# -# -# - -#######################函数段。下文调用的额外功能会在此处声明 - -Get_Dist_Name() -{{ - if grep -Eqii "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then - DISTRO='Deepin' - elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then - DISTRO='UniontechOS' - else - DISTRO='OtherOS' - fi -}} - - -####获得发行版名称 - -#########################预设值段 - -version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }} -####用于比较版本?未实装 -BOTTLENAME="@@@BOTTLENAME@@@" -APPVER="@@@APPVER@@@" -EXEC_PATH="@@@EXEC_PATH@@@" -##### 软件在wine中的启动路径 -START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh" -export MIME_TYPE="" -#####没什么用 -export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@" -####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关 -export APPRUN_CMD="@@@APPRUN_CMD@@@" -#####wine启动指令,建议 -EXPORT_ENVS="" - -export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` - -ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" - -export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64 - -export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls" - -DISABLE_ATTACH_FILE_DIALOG="" -##默认为空。若为1,则不使用系统自带的文件选择,而是使用wine的 -##对于deepin/UOS,大部分的应用都不需要使用wine的,如果有需求(比如wine应用选择的限定种类文件系统的文管不支持) -##请填1。 -##注意:因为非DDE的环境不确定,所以默认会在非Deepin/UOS发行版上禁用这个功能。如果你确认在适配的发行版上可以正常启动,请注释或者删除下面这段 - -##############<<<<<<<<<禁用文件选择工具开始 -Get_Dist_Name -#此功能实现参见结尾函数段 -if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then -DISABLE_ATTACH_FILE_DIALOG="1" -echo "非deepin/UOS,默认关闭系统自带的文件选择工具,使用Wine的" -echo "如果你想改变这个行为,请到/opt/apps/$DEB_PACKAGE_NAME/files/$0处修改" -echo "To打包者:如果你要打开自带请注意在适配的发行版上进行测试" -echo "To用户:打包者没有打开这个功能,这证明启用这个功能可能造成运行问题。如果你要修改这个行为,请确保你有一定的动手能力" -fi -##############>>>>>>>>>禁用文件选择工具结束 - -##############<<<<<<<<<屏蔽mono和gecko安装器开始 -##默认屏蔽mono和gecko安装器 -{['''#if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then - -#export WINEDLLOVERRIDES="mscoree,mshtml=" -#echo "为了降低打包体积,默认关闭gecko和momo,如有需要,注释此行(仅对spark-wine7-devel有效)" - -#fi''', '''if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then - -export WINEDLLOVERRIDES="mscoree,mshtml=" -echo "为了降低打包体积,默认关闭gecko和momo,如有需要,注释此行(仅对spark-wine7-devel有效)" - -fi'''][int(disabledMono.isChecked())]} -##############>>>>>>>>>屏蔽mono和gecko安装器结束 - -#########################执行段 - - - - -if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then - export ATTACH_FILE_DIALOG=1 -fi - -if [ -n "$EXPORT_ENVS" ];then - export $EXPORT_ENVS -fi - -if [ -n "$EXEC_PATH" ];then - if [ -z "${{EXEC_PATH##*.lnk*}}" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@" - else - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" - fi -else - $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" -fi""" - ][chooseWineHelperValue.isChecked()], - "info": f'''{{ - "appid": "{e1_text.text()}", - "name": "{e8_text.text()}", - "version": "{e2_text.text()}", - "arch": ["{debFirstArch.currentText()}"], - "permissions": {{ - "autostart": false, - "notification": false, - "trayicon": true, - "clipboard": true, - "account": false, - "bluetooth": false, - "camera": true, - "audio_record": true, - "installed_apps": false - }} -}}''' - }, - { - # ARM64 通用 wine 打包配置文件 - "Wine": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ", - "Architecture": "arm64", - "Depends": "com.deepin-wine6-stable.deepin (>= 6.0deepin31), com.wine-helper.deepin (>= 0.0.8), com.deepin-box86.deepin (>= 0.2.6deepin3), deepin-elf-verify (>= 1.1.1-1)", - "postinst": f"""#!/bin/sh - -ACTIVEX_NAME="" - -if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then - /opt/apps/{e1_text.text()}/files/install.sh -i -fi - -if [ -n "$ACTIVEX_NAME" ]; then - if [ ! -d "/usr/lib/mozilla/plugins" ];then - mkdir -p /usr/lib/mozilla/plugins - fi - cp /usr/lib/pipelight/libpipelight.so /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so - glib-compile-schemas /usr/share/glib-2.0/schemas/ -fi - -# Make sure the script returns 0 -true -""", - # 因为 arm 不依赖 helper,所以要自带 kill.sh - "kill.sh": """#!/bin/bash - -APP_NAME="QQ" -LOG_FILE=$0 -SHELL_DIR=$(dirname $0) -SHELL_DIR=$(realpath "$SHELL_DIR") -if [ $SPECIFY_SHELL_DIR ]; then - SHELL_DIR=$SPECIFY_SHELL_DIR -fi - -PUBLIC_DIR="/var/public" - -UsePublicDir() -{ - if [ -z "$USE_PUBLIC_DIR" ]; then - echo "Don't use public dir" - return 1 - fi - if [ ! -d "$PUBLIC_DIR" ];then - echo "Not found $PUBLIC_DIR" - return 1 - fi - if [ ! -r "$PUBLIC_DIR" ];then - echo "Can't read for $PUBLIC_DIR" - return 1 - fi - if [ ! -w "$PUBLIC_DIR" ];then - echo "Can't write for $PUBLIC_DIR" - return 1 - fi - if [ ! -x "$PUBLIC_DIR" ];then - echo "Can't excute for $PUBLIC_DIR" - return 1 - fi - - return 0 -} - -WINE_BOTTLE="$HOME/.deepinwine" - -if UsePublicDir;then - WINE_BOTTLE="$PUBLIC_DIR" -fi - -get_wine_by_pid() -{ - wine_path=$(cat /proc/$1/maps | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 | awk '{print $6}') - if [ -z "$wine_path" ];then - cat /proc/$1/cmdline| xargs -0 -L1 -I{} echo {} | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 - else - echo $wine_path - fi -} - -is_wine_process() -{ - wine_module=$(get_wine_by_pid $1) - if [ -z "$wine_module" ];then - wine_module=$(cat /proc/$1/maps | grep -E "\/wineserver$" | head -1) - fi - echo $wine_module -} - -get_prefix_by_pid() -{ - WINE_PREFIX=$(xargs -0 printf '%s\n' < /proc/$1/environ | grep WINEPREFIX) - WINE_PREFIX=${WINE_PREFIX##*=} - if [ -z "$WINE_PREFIX" ] && [ -n "$(is_wine_process $1)" ]; then - #不指定容器的情况用默认容器目录 - WINE_PREFIX="$HOME/.wine" - fi - if [ -n "$WINE_PREFIX" ];then - WINE_PREFIX=$(realpath $WINE_PREFIX) - echo $WINE_PREFIX - fi -} - -get_wineserver() -{ - if [ -z "$1" ];then - return - fi - targ_prefix=$(realpath $1) - ps -ef | grep wineserver | while read server_info ;do - debug_log_to_file "get server info: $server_info" - server_pid=$(echo $server_info | awk '{print $2}') - server_prefix=$(get_prefix_by_pid $server_pid) - debug_log_to_file "get server pid $server_pid, prefix: $server_prefix" - - if [ "$targ_prefix" = "$server_prefix" ];then - server=$(echo $server_info | awk '{print $NF}') - if [ "-p0" = "$server" ];then - server=$(echo $server_info | awk '{print $(NF-1)}') - fi - debug_log_to_file "get server $server" - echo $server - return - fi - done -} - -init_log_file() -{ - if [ -d "$DEBUG_LOG" ];then - LOG_DIR=$(realpath $DEBUG_LOG) - if [ -d "$LOG_DIR" ];then - LOG_FILE="${LOG_DIR}/${LOG_FILE##*/}.log" - echo "" > "$LOG_FILE" - debug_log "LOG_FILE=$LOG_FILE" - fi - fi -} - -debug_log_to_file() -{ - if [ -d "$DEBUG_LOG" ];then - strDate=$(date) - echo -e "${strDate}:${1}" >> "$LOG_FILE" - fi -} - -debug_log() -{ - strDate=$(date) - echo "${strDate}:${1}" -} - -init_log_file - -get_bottle_path_by_process_id() -{ - PID_LIST="$1" - PREFIX_LIST="" - - for pid_var in $PID_LIST ; do - WINE_PREFIX=$(get_prefix_by_pid $pid_var) - #去掉重复项 - for path in $(echo -e $PREFIX_LIST) ; do - if [[ $path == "$WINE_PREFIX" ]]; then - WINE_PREFIX="" - fi - done - if [ -d "$WINE_PREFIX" ]; then - debug_log_to_file "found $pid_var : $WINE_PREFIX" - PREFIX_LIST+="\n$WINE_PREFIX" - fi - done - echo -e $PREFIX_LIST -} - -get_pid_by_process_name() -{ - PID_LIST="" - for pid_var in $(ps -ef | grep -E -i "$1" | grep -v grep | awk '{print $2}');do - #通过判断是否加载wine来判断是不是wine进程 - if [ -n "$(is_wine_process $pid_var)" ];then - PID_LIST+=" $pid_var" - fi - done - echo "$PID_LIST" -} - -get_bottle_path_by_process_name() -{ - PID_LIST=$(get_pid_by_process_name $1) - debug_log_to_file "get pid list: $PID_LIST" - get_bottle_path_by_process_id "$PID_LIST" -} - -get_bottle_path() -{ - if [ -z "$1" ];then - return 0 - fi - - if [ -f "$1/user.reg" ]; then - realpath "$1" - return 0 - fi - - if [ -f "$WINE_BOTTLE/$1/user.reg" ]; then - realpath "$WINE_BOTTLE/$1" - return 0 - fi - get_bottle_path_by_process_name "$1" -} - -kill_app() -{ - debug_log "try to kill $1" - for path in $(get_bottle_path $1); do - if [ -n "$path" ];then - WINESERVER=$(get_wineserver "$path") - - if [ -f "$WINESERVER" ];then - debug_log "kill $path by $WINESERVER" - env WINEPREFIX="$path" "$WINESERVER" -k - fi - - PID_LIST=$(get_pid_by_process_name "exe|wine") - for tag_pid in $PID_LIST; do - bottle=$(get_bottle_path_by_process_id "$tag_pid") - bottle=${bottle:1} - if [ "$path" = "$bottle" ];then - echo "kill $tag_pid for $bottle" - kill -9 $tag_pid - fi - done - fi - done - - #Kill defunct process - ps -ef | grep -E "$USER.*exe.*" - ps -ef | grep -E "$USER.*exe.*" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {} -} - -get_tray_window() -{ - $SHELL_DIR/get_tray_window | grep window_id: | awk -F: '{print $2}' -} - -get_stacking_window() -{ - xprop -root _NET_CLIENT_LIST_STACKING | awk -F# '{print $2}' | sed -e 's/, / /g' -} - -get_window_pid() -{ - for winid in $(echo "$1" | sed -e 's/ /\n/g') ; - do - xprop -id $winid _NET_WM_PID | awk -F= '{print $2}' - done -} - -get_window_bottle() -{ - debug_log_to_file "get_window_bottle $1" - PID_LIST=$(get_window_pid "$1") - debug_log_to_file "get_window_bottle pid list: $PID_LIST" - get_bottle_path_by_process_id "$PID_LIST" -} - -get_active_bottles() -{ - TRAYWINDOWS=$(get_tray_window) - STACKINGWINDOWS=$(get_stacking_window) - debug_log_to_file "tray window id: $TRAYWINDOWS" - debug_log_to_file "stacking window id: $STACKINGWINDOWS" - PID_LIST="$TRAYWINDOWS $STACKINGWINDOWS" - get_window_bottle "$PID_LIST" -} - -kill_exit_block_app() -{ - TAGBOTTLE=$(get_bottle_path $1) - debug_log "tag bottle: $TAGBOTTLE" - ACTIVEBOTTLES=$(get_active_bottles) - debug_log "active bottles: $ACTIVEBOTTLES" - - if [[ "$ACTIVEBOTTLES" != *"$TAGBOTTLE"* ]]; then - kill_app "$TAGBOTTLE" - fi -} - -#get_active_bottles -#exit - -debug_log "kill $1 $2" - -if [ -n "$1" ]; then - APP_NAME="$1" -fi - -if [ "$2" = "block" ]; then - kill_exit_block_app $APP_NAME $3 -else - kill_app $APP_NAME -fi -""", - "postrm": [f"""#!/bin/sh - -ACTIVEX_NAME="" - -if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then - /opt/apps/{e1_text.text()}/files/install.sh -r -fi - -if [ -n "$ACTIVEX_NAME" ]; then - rm /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so - glib-compile-schemas /usr/share/glib-2.0/schemas/ -fi - -# Make sure the script returns 0 -true -""", f"""#!/bin/sh - -ACTIVEX_NAME="" - -if [ -f "/opt/apps/{e1_text.text()}/files/install.sh" ];then - /opt/apps/{e1_text.text()}/files/install.sh -r -fi - -if [ -n "$ACTIVEX_NAME" ]; then - rm /usr/lib/mozilla/plugins/libpipelight-${{ACTIVEX_NAME}}.so - glib-compile-schemas /usr/share/glib-2.0/schemas/ -fi - -# Make sure the script returns 0 -true -# Clean Botton -if [ "$1" = "remove" ] || [ "$1" = "purge" ];then - -echo "清理卸载残留" -CONTAINER_NAME="{e5_text.text()}" - -if [ -z $CONTAINER_NAME ];then -echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除" -exit -fi - -/opt/apps/{e1_text.text()}/kill.sh $CONTAINER_NAME -###这里注意,如果没写CONTAINER_NAME,会把QQ杀了 - -for username in $(ls /home) - do - echo /home/$username - if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ] - then - rm -rf /home/$username/.deepinwine/$CONTAINER_NAME - fi - done -else -echo "非卸载,跳过清理" -fi -"""][int(rmBash.isChecked())], - - # 又又又改 - "run.sh": f"""#!/bin/bash - -# Copyright (C) 2016 Deepin, Inc. -# -# Author: Li LongYu -# Peng Hao - -version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }} - -ACTIVEX_NAME="" -BOTTLENAME="@@@BOTTLENAME@@@" -APPVER="@@@APPVER@@@" -EXEC_PATH="@@@EXEC_PATH@@@" -START_SHELL_PATH="{['/opt/deepinwine/tools/run_v4.sh', '/opt/deepinwine/tools/spark_run_v4.sh'][chooseWineHelperValue.isChecked()]}" -export MIME_TYPE="" -export MIME_EXEC="" -export DEB_PACKAGE_NAME="{e1_text.text()}" -export APPRUN_CMD="deepin-wine6-stable" -DISABLE_ATTACH_FILE_DIALOG="" -EXPORT_ENVS="" -EXEC_NAME="@@@EXEC_NAME@@@" -INSTALL_SETUP="" -export BOX86_EMU_CMD="/opt/deepin-box86/stable/box86" - -export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` - -ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" - -if [ -z "$APPRUN_CMD" ];then - export APPRUN_CMD="/opt/deepin-wine6-stable/bin/wine" -fi -if [ -f "$APPRUN_CMD" ];then - wine_path=$(dirname $APPRUN_CMD) - wine_path=$(realpath "$wine_path/../") - export WINEDLLPATH=$wine_path/lib:$wine_path/lib64 -else - export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64 -fi - -export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls" - -_SetRegistryValue() -{{ - env WINEPREFIX="$BOTTLEPATH" $APPRUN_CMD reg ADD "$1" /v "$2" /t "$3" /d "$4" /f -}} - -if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then - export ATTACH_FILE_DIALOG=1 -fi - -if [ -n "$EXPORT_ENVS" ];then - export $EXPORT_ENVS -fi - -# 打包安装程序的情况 -if [[ -z "$EXEC_PATH" ]] && [[ -n "$INSTALL_SETUP" ]];then - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" -c - BOTTLEPATH="$HOME/.deepinwine/$BOTTLENAME" - EXEC_PATH=$(find "$BOTTLEPATH" -name $EXEC_NAME | head -1) - if [ -z "$EXEC_PATH" ];then - _SetRegistryValue "HKCU\\Software\\Wine\\DllOverrides" winemenubuilder.exe REG_SZ - WINEPREFIX="$BOTTLEPATH" $APPRUN_CMD "$ARCHIVE_FILE_DIR/$INSTALL_SETUP" - EXEC_PATH=$(find "$BOTTLEPATH" -name $EXEC_NAME | head -1) - - cp "$ARCHIVE_FILE_DIR/setup.md5sum" "$BOTTLEPATH" - fi - - if [ -z "$EXEC_PATH" ];then - echo "安装失败退出" - exit - fi -fi - -if [ -n "$EXEC_PATH" ];then - if [ -z "${{EXEC_PATH##*.lnk*}}" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@" - elif [ -z "${{EXEC_PATH##*.bat}}" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "cmd" -f /c "$EXEC_PATH" "${{@:2}}" - else - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" - fi -elif [ -n "$ACTIVEX_NAME" ] && [ $# -gt 1 ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "$1" -f "${{@:2}}" -else - $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" -fi -""", - "info": f'''{{ - "appid": "{e1_text.text()}", - "name": "{e8_text.text()}", - "version": "{e2_text.text()}", - "arch": ["arm64"], - "permissions": {{ - "autostart": false, - "notification": false, - "trayicon": true, - "clipboard": true, - "account": false, - "bluetooth": false, - "camera": true, - "audio_record": true, - "installed_apps": false - }} -}}''' - }, - { - "Wine": None, - "Architecture": "all", - "Depends": "cxoffice20 | cxoffice5 | cxoffice5:i386", - "run.sh": None, - "info": None, - "postinst": f'''#!/bin/sh -# (c) Copyright 2008. CodeWeavers, Inc. - -# Setup logging -if [ -n "$CX_LOG" ] -then - [ "$CX_LOG" = "-" ] || exec 2>>"$CX_LOG" - echo >&2 - echo "***** `date`" >&2 - echo "Starting: $0 $@" >&2 - set -x -fi - -action="$1" -oldver="$2" - -CX_ROOT="/opt/cxoffice" -CX_BOTTLE="{e5_text.text()}" -export CX_ROOT CX_BOTTLE - -if [ "$action" = "configure" ] -then - uuid="" - uuid_file="$CX_ROOT/support/$CX_BOTTLE/.uuid" - if [ -f "$uuid_file" ] - then - uuid=`cat "$uuid_file"` - rm -f "$uuid_file" - fi - - set_uuid="" - if [ -n "$uuid" ] - then - set_uuid="--set-uuid $uuid" - fi - - "$CX_ROOT/bin/cxbottle" $set_uuid --restored --removeall --install -fi - -# Make sure the script returns 0 -true - - -''', - "postrm": f'''#!/bin/sh -# (c) Copyright 2008. CodeWeavers, Inc. - -# Setup logging -if [ -n "$CX_LOG" ] -then - [ "$CX_LOG" = "-" ] || exec 2>>"$CX_LOG" - echo >&2 - echo "***** `date`" >&2 - echo "Starting: $0 $@" >&2 - set -x -fi - -action="$1" - -CX_ROOT="/opt/cxoffice" -CX_BOTTLE="{e5_text.text()}" -export CX_ROOT CX_BOTTLE - -if [ "$action" = "purge" ] -then - # Delete any leftover file - rm -rf "$CX_ROOT/support/$CX_BOTTLE" -fi - -# Make sure the script returns 0 -true - - -''', - "preinst": f'''#!/bin/sh -# (c) Copyright 2008. CodeWeavers, Inc. - -# Setup logging -if [ -n "$CX_LOG" ] -then - [ "$CX_LOG" = "-" ] || exec 2>>"$CX_LOG" - echo >&2 - echo "***** `date`" >&2 - echo "Starting: $0 $@" >&2 - set -x -fi - -action="$1" -oldver="$2" - -CX_ROOT="/opt/cxoffice" -CX_BOTTLE="{e5_text.text()}" -export CX_ROOT CX_BOTTLE - -case "$action" in -install|upgrade) - if [ ! -f "$CX_ROOT/bin/cxbottle" ] - then - echo "error: could not find CrossOver in '$CX_ROOT'" >&2 - exit 1 - fi - if [ ! -x "$CX_ROOT/bin/cxbottle" ] - then - echo "error: the '$CX_ROOT/bin/cxbottle' tool is not executable!" >&2 - exit 1 - fi - if [ ! -x "$CX_ROOT/bin/wineprefixcreate" -o ! -f "$CX_ROOT/bin/wineprefixcreate" ] - then - echo "error: managed bottles are not supported in this version of CrossOver" >&2 - exit 1 - fi - - if [ -d "$CX_ROOT/support/$CX_BOTTLE" ] - then - # Save the bottle's uuid - "$CX_ROOT/bin/cxbottle" --get-uuid >"$CX_ROOT/support/$CX_BOTTLE/.uuid" 2>/dev/null - fi - ;; - -abort-upgrade) - rm -f "$CX_ROOT/support/$CX_BOTTLE/.uuid" - ;; -esac - -# Make sure the script returns 0 -true - - -''', - "prerm": f'''#!/bin/sh -# (c) Copyright 2008. CodeWeavers, Inc. - -# Setup logging -if [ -n "$CX_LOG" ] -then - [ "$CX_LOG" = "-" ] || exec 2>>"$CX_LOG" - echo >&2 - echo "***** `date`" >&2 - echo "Starting: $0 $@" >&2 - set -x -fi - -action="$1" -if [ "$2" = "in-favour" ] -then - # Treating this as an upgrade is less work and safer - action="upgrade" -fi - -CX_ROOT="/opt/cxoffice" -CX_BOTTLE="{e5_text.text()}" -export CX_ROOT CX_BOTTLE - -if [ "$action" = "remove" ] -then - # Uninstall the bottle before cxbottle.conf gets deleted - "$CX_ROOT/bin/cxbottle" --removeall -fi - -# Make sure the script returns 0 -true - - -''' - } - ] - print("c") - if os.path.exists(wine[wineVersion.currentText()]): - debInformation[0]["Depends"] = ["deepin-wine-helper (>= 5.1.30-1)", - "spark-dwine-helper | store.spark-app.spark-dwine-helper" - ][int(chooseWineHelperValue.isChecked())] #+ ["", "libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual\nRecommends: libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1"][] - print("d") - debInformation[0]["run.sh"] = f'''#!/bin/sh - -# Copyright (C) 2016 Deepin, Inc. -# -# Author: Li LongYu -# Peng Hao - -version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }} - -extract_archive() -{{ - archive=$1 - version_file=$2 - dest_dir=$3 - if [ -f "$archive" ] && [ -n "$dest_dir" ] && [ "$dest_dir" != "." ];then - archive_version=`cat $version_file` - if [ -d "$dest_dir" ];then - if [ -f "$dest_dir/VERSION" ];then - dest_version=`cat $dest_dir/VERSION` - if version_gt "$archive_version" "$dest_version";then - 7z x "$archive" -o/"$dest_dir" -aoa - echo "$archive_version" > "$dest_dir/VERSION" - fi - fi - else - mkdir -p $dest_dir - 7z x "$archive" -o/"$dest_dir" -aoa - echo "$archive_version" > "$dest_dir/VERSION" - fi - fi -}} - -BOTTLENAME="{e5_text.text()}" -APPVER="{e2_text.text()}" -EXEC_PATH="@@@EXEC_PATH@@@" -START_SHELL_PATH="{["/opt/deepinwine/tools/run_v4.sh", "/opt/deepinwine/tools/spark_run_v4.sh"][int(chooseWineHelperValue.isChecked())]}" -export MIME_TYPE="" -export DEB_PACKAGE_NAME="{e1_text.text()}" -export APPRUN_CMD="$HOME/.deepinwine/{os.path.basename(wine[wineVersion.currentText()]).replace('.7z', '')}/bin/{useInstallWineArch.currentText()}" -export PATCH_LOADER_ENV="" -export FILEDLG_PLUGIN="/opt/apps/$DEB_PACKAGE_NAME/files/gtkGetFileNameDlg" -DISABLE_ATTACH_FILE_DIALOG="1" -export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` - -DEEPIN_WINE_BIN_DIR=`dirname $APPRUN_CMD` -DEEPIN_WINE_DIR=`dirname $DEEPIN_WINE_BIN_DIR` -ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" - -if [ -n "$PATCH_LOADER_ENV" ] && [ -n "$EXEC_PATH" ];then - export $PATCH_LOADER_ENV -fi - -extract_archive "$ARCHIVE_FILE_DIR/wine_archive.7z" "$ARCHIVE_FILE_DIR/wine_archive.md5sum" "$DEEPIN_WINE_DIR" - -if [ -d "$DEEPIN_WINE_BIN_DIR" ] && [ "$DEEPIN_WINE_BIN_DIR" != "." ];then - export DEEPIN_WINE_BIN_DIR -fi - -if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then - export ATTACH_FILE_DIALOG=1 -fi - -if [ -n "$EXEC_PATH" ];then - $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" -else - $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" -fi -''' - - ############# - # 删除文件 - ############# - self.label.emit("正在删除对构建 deb 包有影响的文件……") - if self.build: - global savePath - global savePathBlock - savePathBlock = False - self.getSavePath.emit("") - # 必须保证信号完全执行才可以继续 - # 所以自制信号锁 - while not savePathBlock: - time.sleep(0.1) - # - if savePath == "": - print("ggg") - self.disabled_or_NORMAL_all.emit(True) - return - print("aaa") - debPackagePath = savePath - print("g") - else: - debPackagePath = f"/tmp/{random.randint(0, 9999)}" - #self.run_command(f"rm -rfv /tmp/{debPackagePath}") - print("f") - # 为了避免删库,必须保证是 deb 文件构建目录才进行清空 - if os.path.exists(f"{debPackagePath}/DEBIAN/control"): - self.run_command(f"rm -rfv '{debPackagePath}/usr'") - self.run_command(f"rm -rfv '{debPackagePath}/opt'") - self.run_command(f"rm -rfv '{debPackagePath}/DEBIAN'") - print("d") - ############### - # 创建目录 - ############### - self.label.emit("正在创建目录……") - os.makedirs("{}/DEBIAN".format(debPackagePath)) - - if debArch.currentIndex() != 2: - # Deepin Wine 包目录结构 - os.makedirs("{}/opt/apps/{}/entries/applications".format(debPackagePath, e1_text.text())) - os.makedirs("{}/opt/apps/{}/entries/icons/hicolor/scalable/apps".format(debPackagePath, e1_text.text())) - os.makedirs("{}/opt/apps/{}/files".format(debPackagePath, e1_text.text())) - else: - # Crossover包目录结构 - os.makedirs(f"{debPackagePath}/opt/cxoffice/support/{e5_text.text()}") - # 为啥就没了 - ############### - # 创建文件 - ############### - self.label.emit("正在创建文件……") - os.mknod("{}/DEBIAN/control".format(debPackagePath)) - #os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text())) - #os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text())) - if debArch.currentIndex() != 2: - os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text())) - #########!!!!!!! - Build7z(b, self, debInformation, debPackagePath) - ############### - # 压缩 Wine - ############### - # Deepin Wine 包 - print("e") - self.label.emit("正在处理 Wine") - if os.path.exists(wine[wineVersion.currentText()]): - shutil.copy(f"{programPath}/gtkGetFileNameDlg", f"{debPackagePath}/opt/apps/{e1_text.text()}/files/gtkGetFileNameDlg") - if wine[wineVersion.currentText()][-3:] == ".7z": - # 都有了为什么要打包呢? - shutil.copy(wine[wineVersion.currentText()], f"{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z") - else: - self.run_command(f"7z a '{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z' '{wine[wineVersion.currentText()]}/*'") - ############### - # 复制文件 - ############### - self.label.emit("正在复制文件……") - if os.path.exists(wine[wineVersion.currentText()]) and debArch.currentIndex() != 2: - shutil.copy(f"{programPath}/gtkGetFileNameDlg", f"{debPackagePath}/opt/apps/{e1_text.text()}/files") - # arm64 box86 需要复制 dlls-arm 目录 - '''if debArch.currentIndex() == 1: - if not os.path.exists(f"{programPath}/dlls-arm"): - self.run_command(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\"") - os.remove(f"{programPath}/dlls-arm.7z") - if not os.path.exists(f"{programPath}/wined3d.dll.so"): - self.run_command(f"7z x \"{programPath}/wined3d.dll.so.7z\" -o\"{programPath}\"") - os.remove(f"{programPath}/wined3d.dll.so.7z") - self.run_command(f"cp -rv '{programPath}/dlls-arm' {debPackagePath}/opt/apps/{e1_text.text()}/files/dlls") - self.run_command(f"cp -rv '{programPath}/wined3d.dll.so' {debPackagePath}/opt/apps/{e1_text.text()}/files/") - elif debArch.currentIndex() == 2: - if not os.path.exists(f"{programPath}/exagear"): - self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/exagear.7z") - self.run_command(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\"") - os.remove(f"{programPath}/exagear.7z") - self.run_command(f"cp -rv '{programPath}/exagear/*' {debPackagePath}/opt/apps/{e1_text.text()}/files/")''' - if debArch.currentIndex() == 1: - # 解包文件 - if not os.path.exists(f"{programPath}/dlls-arm"): - self.run_command(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\"") - os.remove(f"{programPath}/dlls-arm.7z") - # 已废弃 - #if not os.path.exists(f"{programPath}/exa"): - # self.run_command(f"7z x \"{programPath}/exa.7z\" -o\"{programPath}\"") - # os.remove(f"{programPath}/exa.7z") - if not os.path.exists(f"{programPath}/arm-package"): - self.run_command(f"7z x \"{programPath}/arm-package.7z\" -o\"{programPath}\"") - os.remove(f"{programPath}/arm-package.7z") - #if not os.path.exists(f"{programPath}/wined3d.dll.so"): - # self.run_command(f"7z x \"{programPath}/wined3d.dll.so.7z\" -o\"{programPath}\"") - # os.remove(f"{programPath}/wined3d.dll.so.7z") - self.run_command(f"cp -rv '{programPath}/dlls-arm' {debPackagePath}/opt/apps/{e1_text.text()}/files/dlls") - self.run_command(f"cp -rv '{programPath}/exa' {debPackagePath}/opt/apps/{e1_text.text()}/files/exa") - self.run_command(f"cp -rv '{programPath}/arm-package/'* {debPackagePath}/opt/apps/{e1_text.text()}/files/") - #self.run_command(f"cp -rv '{programPath}/wined3d.dll.so' {debPackagePath}/opt/apps/{e1_text.text()}/files/") - pass - if debArch.currentIndex() != 2: - if desktopIconTab.count() <= 1: - if e9_text.text() != "": - shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms)) - else: - for i in range(len(a)): - shutil.copy(iconUiList[i][4].text(), "{}/{}".format(debPackagePath, a[i])) - ################ - # 获取文件大小 - ################ - self.label.emit("正在计算文件大小……") - size = int(getFileFolderSize(debPackagePath) / 1000) - ################ - # 写入文本文档 - ################ - self.label.emit("正在写入文件……") - if debRecommend.text() == "": - write_txt(f"{debPackagePath}/DEBIAN/control", f'''Package: {e1_text.text()} -Version: {e2_text.text()} -Architecture: {debInformation[debArch.currentIndex()]["Architecture"]} -Maintainer: {e4_text.text()} -Depends: {debInformation[debArch.currentIndex()]["Depends"]} -Section: non-free/otherosfs -Priority: optional -Multi-Arch: foreign -Installed-Size: {size} -Description: {e3_text.text()} -''') - else: - write_txt(f"{debPackagePath}/DEBIAN/control", f'''Package: {e1_text.text()} -Version: {e2_text.text()} -Architecture: {debInformation[debArch.currentIndex()]["Architecture"]} -Maintainer: {e4_text.text()} -Depends: {debInformation[debArch.currentIndex()]["Depends"]} -Recommends: {debRecommend.text()} -Section: non-free/otherosfs -Priority: optional -Multi-Arch: foreign -Installed-Size: {size} -Description: {e3_text.text()} -''') - if debInformation[debArch.currentIndex()]["postinst"] != "": - write_txt(f"{debPackagePath}/DEBIAN/postinst", debInformation[debArch.currentIndex()]["postinst"]) - if debInformation[debArch.currentIndex()]["postrm"] != "": - write_txt(f"{debPackagePath}/DEBIAN/postrm", debInformation[debArch.currentIndex()]["postrm"]) - try: - # 因为不一定含有此项,所以需要 try except - if debInformation[debArch.currentIndex()]["preinst"] != "": - write_txt(f"{debPackagePath}/DEBIAN/preinst", debInformation[debArch.currentIndex()]["preinst"]) - if debInformation[debArch.currentIndex()]["prerm"] != "": - write_txt(f"{debPackagePath}/DEBIAN/prerm", debInformation[debArch.currentIndex()]["prerm"]) - except: - pass - replaceMap = [ - ["@@@BOTTLENAME@@@", e5_text.text()], - ["@@@APPVER@@@", e2_text.text()], - ["@@@EXEC_PATH@@@", e7_text.text()], - ["@@@DEB_PACKAGE_NAME@@@", e1_text.text()], - ["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]], - ["@@@EXEC_NAME@@@", os.path.basename(e7_text.text().replace("\\", "/"))] - ] - line = "\\" - if desktopIconTab.count() <= 1 and debArch.currentIndex() != 2: - write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" --uri {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text())) - elif debArch.currentIndex() == 2: - # 直接跳过 .desktop 文件生成 - pass - else: - for i in range(len(iconUiList)): - if iconUiList[i][2].text().replace(" ", "") == "": - command = f"--uri {iconUiList[i][2].text()}" - else: - command = iconUiList[i][2].text() - write_txt("{}/opt/apps/{}/entries/applications/{}-{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text(), os.path.splitext(os.path.basename(iconUiList[i][0].text().replace("\\", "/")))[0]), f'''#!/usr/bin/env xdg-open -[Desktop Entry] -Encoding=UTF-8 -Type=Application -X-Created-By={e4_text.text()} -Categories={iconUiList[i][1].currentText()}; -Icon={a[i]} -Exec="/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(iconUiList[i][0].text().replace(line, "/")))[0]}.sh" {command} -Name={iconUiList[i][3].text()} -Comment={e3_text.text()} -MimeType={e10_text.text()} -GenericName={e1_text.text()} -Terminal=false -StartupNotify=false -''') - # 要开始分类讨论了 - if debArch.currentIndex() == 0 or debArch.currentIndex() == 1 and debArch.currentIndex() != 2: - if desktopIconTab.count() <= 1: - write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", ReplaceText(debInformation[debArch.currentIndex()]["run.sh"], replaceMap)) - else: - for i in iconUiList: - replaceMap = [ - ["@@@BOTTLENAME@@@", e5_text.text()], - ["@@@APPVER@@@", e2_text.text()], - ["@@@EXEC_PATH@@@", i[0].text()], - ["@@@DEB_PACKAGE_NAME@@@", e1_text.text()], - ["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]], - ["@@@EXEC_NAME@@@", os.path.basename(i[0].text().replace("\\", "/"))] - ] - line = "\\" - write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}.sh", ReplaceText(debInformation[debArch.currentIndex()]["run.sh"], replaceMap)) - if debArch.currentIndex() == 1 and False: - # 废弃内容 - '''write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/kill.sh", debInformation[debArch.currentIndex()]["kill.sh"]) - if desktopIconTab.count() <= 1: - write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_box86.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_box86.sh"], replaceMap)) - write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap)) - else: - # Flag:postrm和postinst均需要改,所以先写一下防止自己忘了 - for i in iconUiList: - replaceMap = [ - ["@@@BOTTLENAME@@@", e5_text.text()], - ["@@@APPVER@@@", e2_text.text()], - ["@@@EXEC_PATH@@@", i[0].text()], - ["@@@DEB_PACKAGE_NAME@@@", e1_text.text()], - ["@@@APPRUN_CMD@@@", wine[wineVersion.currentText()]], - ["@@@EXEC_NAME@@@", os.path.basename(i[0].text().replace("\\", "/"))] - ]''' - #write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_box86.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_box86.sh"], replaceMap)) - #write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap)) - if debArch.currentIndex() != 2: - write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"]) - ################ - # 修改文件权限 - ################ - self.label.emit("正在修改文件权限……") - self.run_command("chmod -Rv 0755 {}/DEBIAN".format(debPackagePath)) - if debArch.currentIndex() != 2: - self.run_command("chmod -Rv 644 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text())) - self.run_command("chmod -Rv 644 {}/opt/apps/{}/info".format(debPackagePath, e1_text.text())) - - self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*.sh".format(debPackagePath, e1_text.text())) - #self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/kill.sh".format(debPackagePath, e1_text.text())) - #self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*_with_box86.sh".format(debPackagePath, e1_text.text())) - #self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/*_with_exagear.sh".format(debPackagePath, e1_text.text())) - self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/*.desktop".format(debPackagePath, e1_text.text(), e1_text.text())) - ################ - # 构建 deb 包 - ################ - if not self.build: - self.label.emit("正在构建 deb 包……") - self.run_command("bash -c 'dpkg -b \"{}\" \"{}\"'".format(debPackagePath, e12_text.text())) - ################ - # 删除临时文件 - ################ - if not self.build: - self.label.emit("正在删除临时文件……") - self.run_command(f"rm -rfv '{debPackagePath}'") - ################ - # 完成构建 - ################ - self.label.emit("完成构建!") - self.disabled_or_NORMAL_all.emit(True) - self.infoMsg.emit("打包完毕!") - global change - change = False - except: - traceback.print_exc() - self.errorMsg.emit("程序出现错误,错误信息:\n{}".format(traceback.format_exc())) - self.label.emit("deb 包构建出现错误") - self.signal.emit(traceback.format_exc()) - self.disabled_or_NORMAL_all.emit(True) - -# 写入文本文档 -def write_txt(path, things): - file = open(path, 'a+', encoding='UTF-8') # 设置文件对象 - file.write(things) # 写入文本 - file.close() # 关闭文本对象 - -def chang_textbox1_things(things): - if things.replace("\n", "").replace(" ", "") == "": - return - textbox1.append(things.replace("\n", "")) - -def clean_textbox1_things(): - textbox1.setText("") - - -def getFileFolderSize(fileOrFolderPath): - """get size for file or folder""" - totalSize = 0 - if not os.path.exists(fileOrFolderPath): - return totalSize - if os.path.isfile(fileOrFolderPath): - totalSize = os.path.getsize(fileOrFolderPath) # 5041481 - return totalSize - if os.path.isdir(fileOrFolderPath): - with os.scandir(fileOrFolderPath) as dirEntryList: - for curSubEntry in dirEntryList: - curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name) - if curSubEntry.is_dir(): - curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007 - totalSize += curSubFolderSize - elif curSubEntry.is_file(): - curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891 - totalSize += curSubFileSize - return totalSize - -# 显示“提示”窗口 -def helps(): - QtWidgets.QMessageBox.information(widget, "提示", tips) - -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -# 获取用户主目录 -def get_home(): - return os.path.expanduser('~') - -def ChangeArchCombobox(): - global chooseWineHelperValue - option = True - if debArch.currentIndex() != 0: - option = False - chooseWineHelperValue.setEnabled(option) - if not option: - chooseWineHelperValue.setChecked(False) - wineVersion.setEnabled(option) - useInstallWineArch.setEnabled(option) - #rmBash.setEnabled(option) - if debArch.currentIndex() == 0: - ChangeWine() - debFirstArch.setEnabled(True) - debFirstArch.setCurrentIndex(0) - else: - debFirstArch.setCurrentIndex(2) - debFirstArch.setDisabled(True) - debDepends.setText("com.deepin-wine6-stable.deepin (>= 6.0deepin31), com.wine-helper.deepin (>= 0.0.8), com.deepin-box86.deepin (>= 0.2.6deepin3), deepin-elf-verify (>= 1.1.1-1)") - -def InstallDeb(): - os.system(f"xdg-open '{e12_text.text()}'") - -def ChangeWine(): - useInstallWineArch.setEnabled(os.path.exists(wine[wineVersion.currentText()])) - debDepends.setText([f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei", - f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" - ][int(chooseWineHelperValue.isChecked())]) - debRecommend.setText("") - if os.path.exists(wine[wineVersion.currentText()]): - debDepends.setText(["deepin-wine-helper (>= 5.1.30-1)", - "spark-dwine-helper | store.spark-app.spark-dwine-helper" - ][int(chooseWineHelperValue.isChecked())]) - if "deepin-wine5-stable" in wine[wineVersion.currentText()]: - debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual") - debRecommend.setText("libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1") - -# 获取用户桌面目录 -def get_desktop_path(): - for line in open(get_home() + "/.config/user-dirs.dirs"): # 以行来读取配置文件 - desktop_index = line.find("XDG_DESKTOP_DIR=\"") # 寻找是否有对应项,有返回 0,没有返回 -1 - if desktop_index != -1: # 如果有对应项 - break # 结束循环 - if desktop_index == -1: # 如果是提前结束,值一定≠-1,如果是没有提前结束,值一定=-1 - return -1 - else: - get = line[17:-2] # 截取桌面目录路径 - get_index = get.find("$HOME") # 寻找是否有对应的项,需要替换内容 - if get != -1: # 如果有 - get = get.replace("$HOME", get_home()) # 则把其替换为用户目录(~) - return get # 返回目录 - -change = False -autoChange = True # 有第一次的路径自动设置 -def AutoPathSet(): - global autoChange - autoChange = True - architecture = [debFirstArch.currentText(), "arm64", "arm64"] - if not change: - e12_text.setText(f"{get_desktop_path()}/{e1_text.text()}_{e2_text.text()}_{architecture[debArch.currentIndex()]}.deb") - -def UserPathSet(): - global change - global autoChange - if autoChange: - autoChange = False - return - change = True - -def ReadDeb(unzip = False): - # 获取路径 - debPath = QtWidgets.QFileDialog.getOpenFileName(window, "读取 deb 包", get_home(), "deb包(*.deb);;所有文件(*.*)")[0] - print(debPath) - if debPath == "": - return - # 分类讨论 - path = f"/tmp/deb-unzip-{random.randint(0, 1000)}" - # 新建文件夹 - os.system(f"mkdir -p '{path}'") - # 解包 control 文件 - os.system(f"dpkg -e '{debPath}' '{path}/DEBIAN'") - # 读取 control 文件 - file = open(f"{path}/DEBIAN/control", "r") - lists = file.read().splitlines() - - # 控件映射表 - lnkMap = { - "Package": e1_text, - "Version": e2_text, - "Description": e3_text, - "Maintainer": e4_text, - "Recommends": debRecommend, - "Depends": debDepends - } - - for i in lists: - # 遍历文件 - items = i.strip() - try: - lnkMap[items[:items.index(":")]].setText(items[items.index(":") + 1:].strip()) - if unzip: - # 解压全部文件将不在 control 分析 wine 版本以提升运行效率 - continue - print(items[:items.index(":")]) - if items[:items.index(":")] == "Depends": - # 以下可以通过依赖判断使用什么 wine - depends = items[items.index(":") + 1:].strip().split(",") - for i in depends: - print(i) - # 读取 - if "(" in i: - # 如果有括号(即版本号限制的情况) - temp = i.strip() - dependsItem = temp[:temp.index("(")] - else: - dependsItem = i.strip() - try: - # 这个 wine 是理论上用于运行的 wine - print(wineValue[dependsItem]) - wineVersion.setCurrentText(wineValue[dependsItem]) - break - except: - print("此 Wine 不存在") - except: - # 报错忽略 - print(f"“{items}”项忽略") - - # 判断 postrm 文件是不是自动移除脚本 - # postrm 文件不存在就不需要考虑 - # 三个特征: - # 1、/home/$username/.deepinwine - # 2、非卸载,跳过清理 - # 3、清理卸载残留 - # 都符合才算 - rmBash.setChecked(False) - if os.path.exists(f"{path}/DEBIAN/postrm"): - # 读取文件进行特征筛查 - file = open(f"{path}/DEBIAN/postrm", "r") - postrm = file.read() - if "/home/$username/.deepinwine" in postrm and "非卸载,跳过清理" in postrm and "清理卸载残留" in postrm: - rmBash.setChecked(True) - file.close() - # 解包主文件 - if not unzip: - # 只解压 control 文件的话,结束 - # 顺便删除临时文件 - os.system(f"rm -rfv '{path}'") - return - os.system(f"dpkg -x '{debPath}' '{path}'") - # 读取文件 - # 目前只能实现读取 Wine 运行器(生态适配脚本的也可以读取)打包的 deb - # opt/apps/XXX/files/run.sh 的文件读取识别 - if not os.path.exists(f"{path}/opt/apps/"): - return - # 取默认第一个 - package = os.listdir(f"{path}/opt/apps/")[0] - # 读 7z(基本不读取) - if os.path.exists(f"{path}/opt/apps/{package}/files/files.7z"): - e6_text.setText(f"{path}/opt/apps/{package}/files/files.7z") - lnkMap = { - "Icon": e9_text, - "Name": e8_text, - "MimeType": e10_text - } - # 读 desktop 文件 - if os.path.exists(f"{path}/opt/apps/{package}/entries/applications"): - filePath = f"{path}/opt/apps/{package}/entries/applications/{os.listdir(f'{path}/opt/apps/{package}/entries/applications')[0]}" - file = open(filePath, "r") - items = file.read().splitlines() - file.close() - for i in items: - # 按行解析 - if i.replace(" ", "").replace("\n", "") == "": - # 空行,忽略 - continue - # 忽略注释 - line = i - if "#" in line: - line = line[:line.index("#")] - # 判断是否合法 - try: - name = line[:line.index("=")].strip() - value = line[line.index("=") + 1:]#.replace("\"", "").strip() - if name in lnkMap: - lnkMap[name].setText(value) - continue - # 其它的特殊情况判断 - if name == "Exec": - value = value[value.index(".sh") + 3:].strip() - if value[0] == "\"": - value = value[1:].strip() - # helper - e15_text.setText(value) - if name == "Categories": - option1_text.setCurrentText(value) - except: - print(f"忽略行:{i}") - lnkMap = { - "BOTTLENAME": e5_text, - "EXEC_PATH": e7_text - #"APPRUN_CMD" - } - # 读 run.sh - if os.path.exists(f"{path}/opt/apps/{package}/files/run.sh"): - file = open(f"{path}/opt/apps/{package}/files/run.sh", "r") - items = file.read().splitlines() - file.close() - for i in items: - # 按行解析 - if i.replace(" ", "").replace("\n", "") == "": - # 空行,忽略 - continue - # 忽略 export - line = i.replace("export ", "") - # 忽略注释 - if "#" in line: - line = line[:line.index("#")] - # 判断是否合法 - try: - name = line[:line.index("=")].strip() - value = line[line.index("=") + 1:].replace("\"", "").strip() - #lnkMap[name].setText(value) - if name in lnkMap: - lnkMap[name].setText(value) - continue - # 其它的特殊情况判断 - # 在选择 arm 架构的情况下不勾选 - if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh" and debArch.currentIndex() == 0: - # helper - chooseWineHelperValue.setChecked(True) - if name == "APPRUN_CMD" and value in wineValue: - wineVersion.setCurrentText(wineValue[dependsItem]) - except: - print(f"忽略行:{i}") - elif os.path.exists(f"{path}/opt/apps/{package}/files/run_with_box86.sh"): - file = open(f"{path}/opt/apps/{package}/files/run_with_box86.sh", "r") - items = file.read().splitlines() - file.close() - for i in items: - # 按行解析 - if i.replace(" ", "").replace("\n", "") == "": - # 空行,忽略 - continue - # 忽略 export - line = i.replace("export ", "") - # 忽略注释 - if "#" in line: - line = line[:line.index("#")] - # 判断是否合法 - try: - name = line[:line.index("=")].strip() - value = line[line.index("=") + 1:].replace("\"", "").strip() - #lnkMap[name].setText(value) - if name in lnkMap: - lnkMap[name].setText(value) - continue - # 其它的特殊情况判断 - # 在选择 arm 架构的情况下不勾选 - if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh" and debArch.currentIndex() == 0: - # helper - chooseWineHelperValue.setChecked(True) - if name == "APPRUN_CMD" and value in wineValue: - wineVersion.setCurrentText(wineValue[dependsItem]) - except: - print(f"忽略行:{i}") - elif os.path.exists(f"{path}/opt/apps/{package}/files/run_with_exagear.sh"): - file = open(f"{path}/opt/apps/{package}/files/run_with_exagear.sh", "r") - items = file.read().splitlines() - file.close() - for i in items: - # 按行解析 - if i.replace(" ", "").replace("\n", "") == "": - # 空行,忽略 - continue - # 忽略 export - line = i.replace("export ", "") - # 忽略注释 - if "#" in line: - line = line[:line.index("#")] - # 判断是否合法 - try: - name = line[:line.index("=")].strip() - value = line[line.index("=") + 1:].replace("\"", "").strip() - #lnkMap[name].setText(value) - if name in lnkMap: - lnkMap[name].setText(value) - continue - # 其它的特殊情况判断 - # 在选择 arm 架构的情况下不勾选 - if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh" and debArch.currentIndex() == 0: - # helper - chooseWineHelperValue.setChecked(True) - if name == "APPRUN_CMD" and value in wineValue: - wineVersion.setCurrentText(wineValue[dependsItem]) - except: - print(f"忽略行:{i}") - -def ChangeTapTitle(): - if desktopIconTab.count() <= 1: - desktopIconTab.setTabText(0, "run.sh") - return - title = os.path.basename(iconUiList[desktopIconTab.currentIndex()][0].text().replace("\\", "/")) - desktopIconTab.setTabText(desktopIconTab.currentIndex(), title) - -mapLink = [] - -def AddTab(): - global mapLink - button2 = QtWidgets.QPushButton(transla.transe("U", "浏览……")) - e7_text = QtWidgets.QLineEdit() - e8_text = QtWidgets.QLineEdit() - e9_text = QtWidgets.QLineEdit() - e15_text = QtWidgets.QLineEdit() - iconTab1 = QtWidgets.QWidget() - option1_text = QtWidgets.QComboBox() - option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"]) - option1_text.setCurrentText("Network") - number = int(str(len(mapLink))) - button2.clicked.connect(lambda: button2_cl(number)) - mapLink.append(e9_text) - #desktopIconTabLayout = QtWidgets.QGridLayout() - desktopIconTabLayout = QtWidgets.QGridLayout() - desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件路径(※必填):")), 6, 0, 1, 1) - desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的分类(※必填):")), 7, 0, 1, 1) - desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1) - desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1) - desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1) - iconTab1.setLayout(desktopIconTabLayout) - desktopIconTab.addTab(iconTab1, f"图标{desktopIconTab.count() + 1}") - desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1) - desktopIconTabLayout.addWidget(option1_text, 7, 1, 1, 1) - desktopIconTabLayout.addWidget(e15_text, 8, 1, 1, 1) - desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1) - desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1) - desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1) - e8_text.setWhatsThis(transla.transe("U", """填写该软件的中文或英文名称。""")) - e9_text.setWhatsThis(transla.transe("U", """图标只支持PNG格式和SVG格式,其他格式无法显示。""")) - e15_text.setWhatsThis(transla.transe("U", "程序参数,如%u,一般不需要")) - e7_text.setWhatsThis(transla.transe("U", """可执行文件的运行路径格式是“C:/XXX/XXX.exe”(不包含引号)""")) - option1_text.setWhatsThis(transla.transe("U", """点击右侧的下拉箭头,选择该软件所属的软件分类即可,常见软件分类名称释义: -Network=网络应用; -Chat=即时通讯或社交沟通; -Video=视频播放; -Graphics=图形图像; -Office=办公学习; -Translation=阅读翻译; -Development=软件开发; -Utility=工具软件或其他应用。 -不明白英文的可以百度查询一下软件分类名称的意思。 -注意:此时选择的软件分类名称决定了该软件打包后再安装时会安装在启动器中的哪个软件分类目录中。""")) - e7_text.textChanged.connect(ChangeTapTitle) - e7_text.setPlaceholderText("例如 c:/Program Files/Tencent/QQ/Bin/QQ.exe") - e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式")) - iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text]) - print(iconUiList) - -def DelTab(): - print(desktopIconTab.count()) - if desktopIconTab.count() <= 1: - return - del iconUiList[desktopIconTab.currentIndex()] - desktopIconTab.removeTab(desktopIconTab.currentIndex()) - -def ChangeBottleName(): - global bottleNameLock - global bottleNameChangeLock - e1_text.setText(e1_text.text().replace(" ", "")) - if bottleNameLock: - return - if os.path.basename(e6_text.text()) == ".wine" or e6_text.text() == "": - bottleNameChangeLock = True - e5_text.setText(e1_text.text()) - return - bottleNameChangeLock = True - e5_text.setText(os.path.basename(e6_text.text().replace(" ", ""))) - -def LockBottleName(): - global bottleNameLock - if bottleNameChangeLock: - return - bottleNameLock = True - -# 获取当前语言 -def get_now_lang()->"获取当前语言": - return os.getenv('LANG') - -bottleNameLock = False -############### -# 程序信息 -############### -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -# 如果要添加其他 wine,请在字典添加其名称和执行路径 -wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8"} -wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8"} -# 读取 wine 本地列表 -for i in os.listdir("/opt"): - if os.path.exists(f"/opt/{i}/bin/wine"): - wine[f"/opt/{i}/bin/wine"] = f"/opt/{i}/bin/wine" -try: - for i in os.listdir(f"{get_home()}/.deepinwine"): - if os.path.exists(f"{get_home()}/.deepinwine/{i}/bin/wine"): - wine[f"{get_home()}/.deepinwine/{i}"] = f"{get_home()}/.deepinwine/{i}" -except: - pass -try: - for i in json.loads(readtxt(f"{programPath}/wine/winelist.json")): - if os.path.exists(f"{programPath}/wine/{i}.7z"): - wine[f"{programPath}/wine/{i}.7z"] = f"{programPath}/wine/{i}.7z" - continue - if os.path.exists(f"{programPath}/wine/{i}"): - wine[f"{programPath}/wine/{i}"] = f"{programPath}/wine/{i}" -except: - pass -os.chdir("/") -iconUiList = [] -iconPath = "{}/deepin-wine-runner.svg".format(programPath) -information = json.loads(readtxt(f"{programPath}/information.json")) -version = information["Version"] -# 语言载入 -if not get_now_lang() == "zh_CN.UTF-8": - #trans = QtCore.QTranslator() - #trans.load(f"{programPath}/LANG/deepin-wine-runner-en_US.qm") - #app.installTranslator(trans) - transla = Trans("en_US", f"{programPath}/trans/deepin-wine-packager.json") -else: - transla = Trans("zh_CN") -tips = transla.transe("U", """提示: -1、deb 打包软件包名要求: -软件包名只能含有小写字母(a-z)、数字(0-9)、加号(+)和减号(-)、以及点号(.),软件包名最短长度两个字符;它必须以字母开头 -2、如果要填写路径,有“浏览……”按钮的是要填本计算机对应文件的路径,否则就是填写安装到其他计算机使用的路径 -3、输入 wine 的容器路径时最后面请不要输入“/” -4、输入可执行文件的运行路径时是以“C:/XXX/XXX.exe”的格式进行输入,默认是以 C: 为开头,不用“\”做命令的分隔,而是用“/” -5、.desktop 的图标只支持 PNG 格式和 SVG 格式,其他格式无法显示图标 -6、路径建议不要带空格,容易出问题""") - -############### -# 窗口创建 -############### - -app = QtWidgets.QApplication(sys.argv) -window = QtWidgets.QMainWindow() -widget = QtWidgets.QWidget() -widgetLayout = QtWidgets.QGridLayout() -# 设置变量以修改和获取值项 -wineVersion = QtWidgets.QComboBox() -wineVersion.addItems(wine.keys()) -wineVersion.setCurrentText("deepin-wine6 stable") -e1_text = QtWidgets.QLineEdit() -e2_text = QtWidgets.QLineEdit() -e3_text = QtWidgets.QLineEdit() -e4_text = QtWidgets.QLineEdit() -e5_text = QtWidgets.QLineEdit() -e6_text = QtWidgets.QLineEdit() -e7_text = QtWidgets.QLineEdit() -e8_text = QtWidgets.QLineEdit() -e9_text = QtWidgets.QLineEdit() -e10_text = QtWidgets.QLineEdit() -e12_text = QtWidgets.QLineEdit() -e15_text = QtWidgets.QLineEdit() -label13_text = QtWidgets.QLabel("

当前 deb 打包情况:暂未打包

") -option1_text = QtWidgets.QComboBox() -button1 = QtWidgets.QPushButton(transla.transe("U", "浏览……")) -button2 = QtWidgets.QPushButton(transla.transe("U", "浏览……")) -button4 = QtWidgets.QPushButton(transla.transe("U", "浏览……")) -debControlFrame = QtWidgets.QHBoxLayout() -button5 = QtWidgets.QPushButton(transla.transe("U", "打包……")) -installDeb = QtWidgets.QPushButton(transla.transe("U", "安装打包完成的 deb……")) -buildDebDir = QtWidgets.QPushButton(transla.transe("U", "根据填写内容打包模板")) -build7z = QtWidgets.QPushButton(transla.transe("U", "打包容器 7z 包")) -debControlFrame.addWidget(button5) -debControlFrame.addWidget(installDeb) -rmBash = QtWidgets.QCheckBox(transla.transe("U", "设置卸载该 deb 后自动删除该容器")) -cleanBottonByUOS = QtWidgets.QCheckBox(transla.transe("U", "使用统信 Wine 生态适配活动容器清理脚本")) -disabledMono = QtWidgets.QCheckBox(transla.transe("U", "禁用 Mono 和 Gecko 安装器")) -debArch = QtWidgets.QComboBox() -debArch.addItems(["默认选项", "arm64(box86+exagear)"]) -#debArch.addItems(["i386", "arm64(box86+exagear)", "all(crossover)"]) -textbox1 = QtWidgets.QTextBrowser() -option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"]) -option1_text.setCurrentText("Network") -wineFrame = QtWidgets.QHBoxLayout() -chooseWineHelperValue = QtWidgets.QCheckBox(transla.transe("U", "使用星火wine helper\n(如不勾选默认为deepin-wine-helper)")) -button1.clicked.connect(button1_cl) -button2.clicked.connect(lambda: button2_cl(0)) -mapLink.append(e9_text) -button4.clicked.connect(button4_cl) -button5.clicked.connect(make_deb) -buildDebDir.clicked.connect(lambda: make_deb(True)) -build7z.clicked.connect(Build7zButton_Clicked) -installDeb.clicked.connect(InstallDeb) -wineFrame.addWidget(wineVersion) -e1_text.textChanged.connect(ChangeBottleName) -e5_text.textChanged.connect(LockBottleName) -e6_text.textChanged.connect(ChangeBottleName) -e7_text.textChanged.connect(ChangeTapTitle) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要打包的 deb 包的包名(※必填):")), 0, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 包的版本号(※必填):")), 1, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 包的说明(※必填):")), 2, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 包的维护者(※必填):")), 3, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要解压的 wine 容器的名称(※必填):")), 4, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要打包的 wine 容器路径(※必填):")), 5, 0, 1, 1) -desktopIconTab = QtWidgets.QTabWidget() -controlWidget = QtWidgets.QWidget() -controlWidgetLayout = QtWidgets.QHBoxLayout() -desktopIconTabAdd = QtWidgets.QPushButton("+") -desktopIconTabDel = QtWidgets.QPushButton("-") -desktopIconTabAdd.setWhatsThis("添加新图标") -desktopIconTabDel.setWhatsThis("移除选中图标") -controlWidgetLayout.addWidget(desktopIconTabAdd) -controlWidgetLayout.addWidget(desktopIconTabDel) -controlWidget.setLayout(controlWidgetLayout) -desktopIconTabAdd.clicked.connect(AddTab) -desktopIconTabDel.clicked.connect(DelTab) -iconTab1 = QtWidgets.QWidget() -desktopIconTabLayout = QtWidgets.QGridLayout() -desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件路径(※必填):")), 6, 0, 1, 1) -desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的分类(※必填):")), 7, 0, 1, 1) -desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1) -desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1) -desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1) -iconTab1.setLayout(desktopIconTabLayout) -#desktopIconTab.setTabPosition(QtWidgets.QTabWidget.East) -desktopIconTab.addTab(iconTab1, "默认图标") -desktopIconTab.setCornerWidget(controlWidget) -widgetLayout.addWidget(desktopIconTab, 8, 0, 6, 3) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "选择打包的 wine 版本(※必选):")), 6, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包 deb 的保存路径(※必填):")), 7, 0, 1, 1) -widgetLayout.addWidget(e1_text, 0, 1, 1, 1) -widgetLayout.addWidget(e2_text, 1, 1, 1, 1) -widgetLayout.addWidget(e3_text, 2, 1, 1, 1) -widgetLayout.addWidget(e4_text, 3, 1, 1, 1) -widgetLayout.addWidget(e5_text, 4, 1, 1, 1) -widgetLayout.addWidget(e6_text, 5, 1, 1, 1) -widgetLayout.addWidget(button1, 5, 2, 1, 1) -desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1) -desktopIconTabLayout.addWidget(option1_text, 7, 1, 1, 1) -desktopIconTabLayout.addWidget(e15_text, 8, 1, 1, 1) -desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1) -desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1) -desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1) -iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text]) -print(iconUiList) -widgetLayout.addLayout(wineFrame, 6, 1, 1, 1) -widgetLayout.addWidget(e12_text, 7, 1, 1, 1) -widgetLayout.addWidget(button4, 7, 2, 1, 1) -widgetLayout.addLayout(debControlFrame, 16, 1, 1, 1) -widgetLayout.addWidget(label13_text, 17, 0, 1, 3) -widgetLayout.addWidget(textbox1, 18, 0, 1, 3) -# 高级功能 -moreSetting = QtWidgets.QGroupBox(transla.transe("U", "高级设置")) -debDepends = QtWidgets.QLineEdit() -debRecommend = QtWidgets.QLineEdit() -debFirstArch = QtWidgets.QComboBox() -debFirstArch.addItems(["all", "i386", "arm64"]) -debFirstArch.setCurrentIndex(0) -debFirstArch.currentIndexChanged.connect(AutoPathSet) -debDepends.setPlaceholderText(transla.transe("U", "deb 包的依赖(如无特殊需求默认即可)")) -debDepends.setText("deepin-wine6-stable, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei") -debRecommend.setPlaceholderText(transla.transe("U", "deb 包的推荐依赖(非强制,一般默认即可)")) -moreSettingLayout = QtWidgets.QVBoxLayout() -localWineVersion = QtWidgets.QComboBox() -useInstallWineArch = QtWidgets.QComboBox() -useInstallWineArch.addItems(["wine", "wine64"]) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "Wine 位数(只限本地需要打包集成的Wine):\n提示:32位的Wine不能使用64位容器"))) -#moreSettingLayout.addWidget(localWineVersion) -moreSettingLayout.addWidget(useInstallWineArch) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 包选项:"))) -moreSettingLayout.addWidget(rmBash) -moreSettingLayout.addWidget(cleanBottonByUOS) -moreSettingLayout.addWidget(chooseWineHelperValue) -moreSettingLayout.addWidget(disabledMono) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 的依赖(强制,如无特殊需求默认即可):"))) -moreSettingLayout.addWidget(debDepends) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 的推荐依赖(非强制,一般默认即可):"))) -moreSettingLayout.addWidget(debRecommend) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的 MimeType:"))) -moreSettingLayout.addWidget(e10_text) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包 deb 架构:"))) -moreSettingLayout.addWidget(debFirstArch) -moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包选项:"))) -moreSettingLayout.addWidget(debArch) -moreSetting.setLayout(moreSettingLayout) -widgetLayout.addWidget(moreSetting, 0, 3, 16, 2) -widgetLayout.addWidget(build7z, 16, 3) -widgetLayout.addWidget(buildDebDir, 16, 4) -useInstallWineArch.setDisabled(True) -wineVersion.currentTextChanged.connect(ChangeWine) -chooseWineHelperValue.stateChanged.connect(ChangeWine) -e1_text.textChanged.connect(AutoPathSet) -e2_text.textChanged.connect(AutoPathSet) -debArch.currentIndexChanged.connect(AutoPathSet) -debArch.currentIndexChanged.connect(ChangeArchCombobox) -e12_text.textChanged.connect(UserPathSet) -e1_text.setPlaceholderText("例如 spark-deepin-wine-runner,不建议有大写字符") -e2_text.setPlaceholderText(f"例如 {version}") -e7_text.setPlaceholderText("例如 c:/Program Files/Tencent/QQ/Bin/QQ.exe") -e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式")) -# 菜单栏 -menu = window.menuBar() -programmenu = menu.addMenu(transla.transe("U", "程序")) -debMenu = menu.addMenu(transla.transe("U", "deb 包")) -uploadSparkStore = menu.addMenu(transla.transe("U", "投稿到星火应用商店")) -help = menu.addMenu(transla.transe("U", "帮助")) -exit = QtWidgets.QAction(transla.transe("U", "退出程序")) -debE = QtWidgets.QAction(transla.transe("U", "只读取 Control 信息")) -debX = QtWidgets.QAction(transla.transe("U", "读取所有(需解包,时间较久)")) -uploadSparkStoreWebsize = QtWidgets.QAction(transla.transe("U", "从网页端投稿")) -if os.path.exists("/opt/spark-store-submitter/bin/spark-store-submitter"): - uploadSparkStoreProgram = QtWidgets.QAction(transla.transe("U", "使用投稿器投稿(推荐)")) -else: - uploadSparkStoreProgram = QtWidgets.QAction(transla.transe("U", "使用投稿器投稿(推荐,请先安装投稿器)")) - uploadSparkStoreProgram.setDisabled(True) -tip = QtWidgets.QAction(transla.transe("U", "小提示")) -getPdfHelp = QtWidgets.QAction(transla.transe("U", "Wine运行器和Wine打包器傻瓜式使用教程(小白专用)\nBy @雁舞白沙")) -exit.triggered.connect(window.close) -tip.triggered.connect(helps) -programmenu.addAction(exit) -debMenu.addAction(debE) -debMenu.addAction(debX) -uploadSparkStore.addAction(uploadSparkStoreProgram) -uploadSparkStore.addAction(uploadSparkStoreWebsize) -debE.triggered.connect(lambda: ReadDeb(False)) -debX.triggered.connect(lambda: ReadDeb(True)) -uploadSparkStoreWebsize.triggered.connect(lambda: webbrowser.open_new_tab("https://upload.deepinos.org")) -uploadSparkStoreProgram.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"/opt/spark-store-submitter/bin/spark-store-submitter '{e12_text.text()}'"]).start()) -getPdfHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://bbs.deepin.org/post/246837")) -help.addAction(tip) -help.addAction(getPdfHelp) -# 控件配置 -try: - e6_text.setText(sys.argv[1].replace("~", get_home())) - e5_text.setText(pathlib.PurePath(sys.argv[1]).name) - wineVersion.setCurrentText(sys.argv[2]) -except: - pass -rmBash.setChecked(True) -disabledMono.setChecked(True) -cleanBottonByUOS.setChecked(True) -chooseWineHelperValue.setChecked(True) -e12_text.setText(f"{get_desktop_path()}/demo_1.0.0_all.deb") -widget.setLayout(widgetLayout) -window.setCentralWidget(widget) -window.setWindowTitle(f"wine 应用打包器 {version}") -window.setWindowIcon(QtGui.QIcon(iconPath)) -window.resize(int(window.frameSize().width() * 2.1), int(window.frameSize().height())) -e1_text.setWhatsThis("""com.XXX.deepin -XXX指windows软件的英文名称,可以自定义名称,但最好是用软件解压安装后自动生成的英文名称,如:dingtalk。包名只能含有小写字母(a-z)、数字(0-9)、加号(+)和减号(-)、以及点号(.),软件包名最短长度为两个字符,且包名必须以字母开头。""") -# 创建控件 -e2_text.setWhatsThis(transla.transe("U", """6.5.50(随便填写或填写该软件的windows版本的版本号,6.5.50只是示例)。""")) -e3_text.setWhatsThis(transla.transe("U", """随便填写或使用该软件的windows版本的软件简介。""")) -e4_text.setWhatsThis(transla.transe("U", """填写自己的网名,若是自用软件,不上架至应用商店,不进行后续维护,可随便填写。""")) -e5_text.setWhatsThis(f"

解压容器到其它机器的容器名称,一般自动带出

") -e6_text.setWhatsThis(transla.transe("U", f"要打包的容器所在路径,也可以选择已经好打包的 7z 文件,一般自动带出")) -e7_text.setWhatsThis("""可执行文件的运行路径格式是“C:/XXX/XXX.exe”(不包含引号)""") -debArch.setWhatsThis(transla.transe("U", "选择生成 deb 包所对应的架构")) -rmBash.setWhatsThis(transla.transe("U", "清理容器无用内容,一般建议勾选,最新版本默认勾选,如果有特殊需求(如容器内有 mono、gecko 等)建议取消勾选")) -debDepends.setWhatsThis(transla.transe("U", "生成 deb 包所需的依赖,一般情况下默认即可")) -debRecommend.setWhatsThis(transla.transe("U", "生成 deb 包的推荐依赖,一般情况下为空即可")) -cleanBottonByUOS.setWhatsThis(transla.transe("U", "清理容器无用内容,一般建议勾选,最新版本默认勾选,如果有特殊需求(如容器内有 mono、gecko 等)建议取消勾选")) -chooseWineHelperValue.setWhatsThis(transla.transe("U", "使用星火 dwine helper 替换 Deepin Wine Helper,投稿星火应用商店的话建议勾选,最新版本默认勾选(如果打包 arm 包将不会提供选择)")) -option1_text.setWhatsThis("""点击右侧的下拉箭头,选择该软件所属的软件分类即可,常见软件分类名称释义: -Network=网络应用; -Chat=即时通讯或社交沟通; -Video=视频播放; -Graphics=图形图像; -Office=办公学习; -Translation=阅读翻译; -Development=软件开发; -Utility=工具软件或其他应用。 -不明白英文的可以百度查询一下软件分类名称的意思。 -注意:此时选择的软件分类名称决定了该软件打包后再安装时会安装在启动器中的哪个软件分类目录中。""") -e8_text.setWhatsThis(transla.transe("U", """填写该软件的中文或英文名称。""")) -e9_text.setWhatsThis(transla.transe("U", """图标只支持PNG格式和SVG格式,其他格式无法显示。""")) -e10_text.setWhatsThis(transla.transe("U", "快捷方式的 MimeType 项,一般为空即可")) -option1_text.setWhatsThis(transla.transe("U", "打包的 Wine 版本,根据实际情况选择(如果打包 arm 包将不会提供选择)")) -e12_text.setWhatsThis(transla.transe("U", "打包出的 deb 生成的位置,一般自动生成")) -e15_text.setWhatsThis(transla.transe("U", "程序参数,如%u,一般不需要")) -build7z.setWhatsThis(transla.transe("U", "只打包容器生成 7z 包,不做其它操作")) -buildDebDir.setWhatsThis(transla.transe("U", "构建 deb 包目录,但不打包成 deb")) -textbox1.setWhatsThis(transla.transe("U", "查看打包过程中命令返回内容")) -button5.setWhatsThis(transla.transe("U", "点击该按钮打包生成 deb")) -installDeb.setWhatsThis(transla.transe("U", "调用默认的 deb 安装工具安装生成的 deb")) -#window.setWindowFlag(QtGui.Qt) -window.show() -sys.exit(app.exec_()) -# Flag:解包只读control和解包全部读取 \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner deleted file mode 100755 index 65004ce..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner +++ /dev/null @@ -1,3105 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -################################################################################################################# -# 作者:gfdgd xi -# 版本:3.0.0 -# 更新时间:2022年12月10日 -# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 -# 基于 Python3 的 PyQt5 构建 -################################################################################################################# -################# -# 引入所需的库 -################# -import os -import sys -import time -import json -import pyperclip -import random -import base64 -import shutil -import hashlib -import platform -import threading -import traceback -import webbrowser -import updatekiller -import subprocess -import req as requests -import urllib.parse as parse -import PyQt5.QtGui as QtGui -import PyQt5.QtCore as QtCore -import PyQt5.QtWidgets as QtWidgets -try: - import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets - bad = False -except: - bad = True -from trans import * -from Model import * - -def PythonLower(): - app = QtWidgets.QApplication(sys.argv) - QtWidgets.QMessageBox.critical(None, "错误", "Python 至少需要 3.6 及以上版本,目前版本:" + platform.python_version() + "") - sys.exit(1) - -# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测 -# 判断主版本号 -if sys.version_info[0] < 3: - PythonLower() -if sys.version_info[1] < 6: - PythonLower() - -################### -# 程序所需事件 -################### - -# 打开程序官网 -def OpenProgramURL(): - webbrowser.open_new_tab(programUrl) - -# 读取文本文档 -def readtxt(path): - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -# 写入文本文档 -def write_txt(path, things): - file = open(path, 'w', encoding='UTF-8') # 设置文件对象 - file.write(things) # 写入文本 - file.close() # 关闭文本对象 - -# 获取用户桌面目录 -def get_desktop_path(): - for line in open(get_home() + "/.config/user-dirs.dirs"): # 以行来读取配置文件 - desktop_index = line.find("XDG_DESKTOP_DIR=\"") # 寻找是否有对应项,有返回 0,没有返回 -1 - if desktop_index != -1: # 如果有对应项 - break # 结束循环 - if desktop_index == -1: # 如果是提前结束,值一定≠-1,如果是没有提前结束,值一定=-1 - return -1 - else: - get = line[17:-2] # 截取桌面目录路径 - get_index = get.find("$HOME") # 寻找是否有对应的项,需要替换内容 - if get != -1: # 如果有 - get = get.replace("$HOME", get_home()) # 则把其替换为用户目录(~) - return get # 返回目录 - -# 获取用户主目录 -def get_home(): - return os.path.expanduser('~') - -# 第一个浏览按钮事件 -def liulanbutton(): - path = QtWidgets.QFileDialog.getExistingDirectory(widget, "选择 wine 容器", json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineBotton.json"))["path"]) - if path != "" and path != "()": - e1.setEditText(path) - write_txt(get_home() + "/.config/deepin-wine-runner/WineBotton.json", json.dumps({"path": path})) # 写入配置文件 - -# 第二个浏览按钮事件 -def liulanexebutton(): - path = QtWidgets.QFileDialog.getOpenFileName(widget, "选择 exe 可执行文件", json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindExe.json"))["path"], "exe 可执行文件(*.exe);;MSI 文件(*.msi);;所有文件(*.*)") - if path != "" and path != "()": - e2.setEditText(path[0]) # 显示路径 - write_txt(get_home() + "/.config/deepin-wine-runner/FindExe.json", json.dumps({"path": os.path.dirname(path[0])})) # 写入配置文件 - -run = None -# 使用多线程运行可执行文件 -def runexebutton(self): - global run - DisableButton(True) - if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine: - if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine,是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No: - DisableButton(False) - return - if e2.currentText() == "": # 判断文本框是否有内容 - QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用的 exe 应用") - DisableButton(False) - return - returnText.setText("") - run = Runexebutton_threading() - run.signal.connect(QT.ShowWineReturn) - run.showHistory.connect(QT.ShowHistory) - run.start() - -class QT: - message = None - def ShowWineReturn(things): - returnText.insertPlainText(things) - - def ShowHistory(temp): - e1.clear() - e2.clear() - e2.addItems(wineBottonHistory) - e2.setEditText(wineBottonHistory[-1]) - e1.addItems(findExeHistory) - e1.setEditText(findExeHistory[-1]) - -repairList = [] -# Flag: 日志推断解决方案功能 -class LogChecking(): - def ShowWindow(): - global logThread - global logWindow - global questionList - global repairButton - logWindow = QtWidgets.QWidget() - logWindowLayout = QtWidgets.QGridLayout() - questionList = QtWidgets.QListView() - repairButton = QtWidgets.QPushButton("一键修复") - repairButton.setDisabled(True) - repairButton.clicked.connect(LogChecking.RepairButton) - nmodel = QtGui.QStandardItemModel(window) - item = QtGui.QStandardItem("正在分析中……") - questionList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) - nmodel.appendRow(item) - questionList.setModel(nmodel) - logWindowLayout.addWidget(questionList, 0, 0, 3, 1) - logWindowLayout.addWidget(repairButton, 0, 2, 1, 1) - logWindow.setWindowTitle("分析日志") - logWindow.setLayout(logWindowLayout) - logThread = LogThreading() - logThread.done.connect(LogChecking.Show) - logThread.start() - logWindow.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) - logWindow.resize(int(logWindow.frameGeometry().width() * 1.2), int(logWindow.frameGeometry().height() * 1.2)) - logWindow.show() - - def RepairButton(): - index = questionList.currentIndex().row() - lists = questionMap[index] - print(f"{programPath}/CheckDLL/bash/{lists[1].lower()}.sh") - if lists[0] == 1 and os.path.exists(f"{programPath}/CheckDLL/bash/{lists[1].lower()}.sh"): - OpenTerminal(f"'{programPath}/AutoShell/main.py' '{programPath}/CheckDLL/bash/{lists[1].lower()}.sh'") - return - if lists[0] == 2: - QtWidgets.QMessageBox.information(logWindow, "修复方法", "切换其它 Wine") - return - if lists[0] == 4: - QtWidgets.QMessageBox.information(logWindow, "修复方法", "如是 Deepin Wine 可以尝试切换 WineHQ,\n并且取消勾选运行器主页面菜单栏“程序”=>“设置Wine”,取消勾选“屏蔽 Wine 默认 Mono 和 Gecko 安装器”\n然后尝试在菜单栏的“Wine”=>“在指定 Wine、容器安装组件”=>“在指定 Wine、容器安装 Gecko”来安装 Gecko") - return - if lists[0] == 5: - InstallMonoGecko("mono") - return - QtWidgets.QMessageBox.critical(logWindow, "错误", "无法修复该问题") - - def Show(lists): - global questionMap - nmodel = QtGui.QStandardItemModel(window) - disbledButton = False - print(lists) - if not len(lists): - nmodel.appendRow(QtGui.QStandardItem(f"√ 无法分析到错误")) - disbledButton = True - for i in lists: - if i[0] == 0: - nmodel.appendRow(QtGui.QStandardItem(f"√ 无法分析到错误")) - disbledButton = True - break - if i[0] == 1: - nmodel.appendRow(QtGui.QStandardItem(f"× 无法调用 Dll:{i[1]}")) - if i[0] == 2: - nmodel.appendRow(QtGui.QStandardItem(f"× 尝试用 Mono 运行非 .net 应用 {i[1]}?")) - if i[0] == 3: - nmodel.appendRow(QtGui.QStandardItem(f"! 无法加载 Gecko,是被禁用或未安装?")) - if i[0] == 4: - nmodel.appendRow(QtGui.QStandardItem(f"× 无法更新 Wine 容器版本,是否还有 Wine 程序运行?")) - if i[0] == 5: - nmodel.appendRow(QtGui.QStandardItem(f"× Mono 禁用/未安装")) - questionMap = lists[:] - repairButton.setDisabled(disbledButton) - questionList.setModel(nmodel) - -class LogThreading(QtCore.QThread): - done = QtCore.pyqtSignal(list) - def __init__(self): - super().__init__() - - def run(self): - global logText - repairList = [] - logText = returnText.toPlainText() - print(logText.splitlines()) - for i in logText.splitlines(): - print(i) - checkingText = i.lower() - if "err:module:import_dll Library".lower() in checkingText: - # Lose Dll - repairList.append([1, i[i.index("Library") + 8: i.index("(")].strip()]) - continue - if "err:module:fixup_imports_ilonly".lower() in checkingText: - # Lose Dll - repairList.append([1, i[i.index("_ilonly") + 8: i.index("not")].strip()]) - continue - if "Cannot open assembly".lower() in checkingText and ": File does not contain a valid CIL image.".lower() in checkingText: - # Mono - repairList.append([2, i.replace(": File does not contain a valid CIL image.", "").replace("Cannot open assembly", "").strip()[1: -1]]) - if "Could not load wine-gecko. HTML rendering will be disabled.".lower() in checkingText and "Could not find Wine Gecko. HTML rendering will be disabled.".lower() in checkingText: - # Disbled Gecko - repairList.append([3, ""]) - if "Your wineserver binary was not upgraded correctly".lower() in checkingText: - repairList.append([4, ""]) - if "Wine Mono is not installed".lower() in checkingText: - repairList.append([5, ""]) - self.done.emit(repairList) - - -def DisableButton(things): - button_r_6.setDisabled(things) - button1.setDisabled(things) - button2.setDisabled(things) - button3.setDisabled(things) - wineConfig.setDisabled(things) - e1.setDisabled(things) - e2.setDisabled(things) - o1.setDisabled(things) - miniAppStore.setDisabled(things) - #winetricksOpen.configure(state=a[things]) - getProgramIcon.setDisabled(things) - uninstallProgram.setDisabled(things) - trasButton.setDisabled(things) - -def CheckProgramIsInstall(program): - return not bool(os.system(f"which '{program}'")) -class Runexebutton_threading(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - showHistory = QtCore.pyqtSignal(str) - def __init__(self): - super().__init__() - - def run(self): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - option = "" - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if setting["MonoGeckoInstaller"]: - option += f"WINEDLLOVERRIDES=\"mscoree,mshtml=\" " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - else: - option += "WINEDEBUG=FIXME,ERR,WARN,TRACE,Message " - wineUsingOption = "" - exePath = e2.currentText() - if True: - fileName = [".exe"] - changePath = False - for i in fileName: - if i in exePath: - print(i) - print(exePath) - l = exePath.index(i) - exePath = f"{exePath[:l+4]}' {exePath[l+4:]} '" - print(l) - print(exePath) - changePath = True - break - #if not changePath and not os.path.exists(changePath): - if not changePath and not os.path.exists(exePath): - # 删除前后无用空格以防止出现问题 - print(exePath) - exePath = exePath.strip() - # 有空格再说 - if " " in exePath: - l = exePath.index(" ") - exePath = f"{exePath[:l]}' {exePath[l:]} '" - print(l) - #print(i) - print(exePath) - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - if setting["TerminalOpen"]: - res = "" - if e2.currentText()[-4:] == ".msi" and os.path.exists(e2.currentText()): - OpenTerminal("env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " msiexec /i '" + e2.currentText() + "' " + setting["WineOption"]) - elif e2.currentText()[-4:] == ".bat" and os.path.exists(e2.currentText()): - OpenTerminal("env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " wineconsole '" + e2.currentText() + "' " + setting["WineOption"]) - else: - OpenTerminal("env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + exePath + "' " + setting["WineOption"]) - #res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"] + "\" --keep-open" + wineUsingOption], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - else: - if e2.currentText()[-4:] == ".msi" and os.path.exists(e2.currentText()): - res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " msiexec /i '" + e2.currentText() + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - elif e2.currentText()[-4:] == ".bat" and os.path.exists(e2.currentText()): - res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " wineconsole '" + e2.currentText() + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - else: - print(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + exePath + "' " + setting["WineOption"]]) - res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + exePath + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # 实时读取程序返回 - # - if not setting["TerminalOpen"]: - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - self.signal.emit(text) - print(text, end="") - if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath: - findExeHistory.append(wineBottonPath) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json", str(json.dumps(ListToDictionary(findExeHistory)))) # 将历史记录的数组转换为字典并写入 - if len(wineBottonHistory) == 0 or wineBottonHistory[-1] != e2.currentText(): - wineBottonHistory.append(e2.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json", str(json.dumps(ListToDictionary(wineBottonHistory)))) # 将历史记录的数组转换为字典并写入 - self.showHistory.emit("") - # 针对 QQ、TIM 安装后不会生成 lnk 的问题,由程序读取以及自动创建 - # 判断是否安装了 QQ/TIM - for i in iconListUnBuild: - if os.path.exists(i[1].replace("wineBottonPath", wineBottonPath)): - if not os.path.exists(f"{get_home()}/.local/share/applications/wine/{i[0]}-{os.path.basename(wineBottonPath)}.desktop"): - print("图标不存在,创建图标") - # 图标不存在 - # 写入 .desktop 文件 - try: - os.system(f"mkdir -p '{get_home()}/.local/share/applications/wine'") - name = i[0] - if setting["BuildByBottleName"]: - name = f"{i[0]}——{os.path.basename(wineBottonPath)}" - write_txt(f"{get_home()}/.local/share/applications/wine/{i[0]}-{os.path.basename(wineBottonPath)}.desktop", f'''[Desktop Entry] -Name={name} -Exec=env WINEPREFIX='{wineBottonPath}' {option} {wine[o1.currentText()]} '{i[1].replace("wineBottonPath", wineBottonPath)}' {setting["WineOption"]} {wineUsingOption} -Icon={programPath}/Icon/{i[0]}.svg -Type=Application -StartupNotify=true''') - except: - # 写入不进去就别写入了,当什么事情都没发生就行 - traceback.print_exc() - DisableButton(False) - -class Temp: - webWindow = None - -def OpenUrl(url): - print(url.url()) - # 判断是否可以使用小窗打开 - if not bad: - '''Temp.webWindow = QtWidgets.QMainWindow() - web = QtWebEngineWidgets.QWebEngineView() - web.setUrl(url) - Temp.webWindow.setWindowTitle("浏览页面") - Temp.webWindow.setCentralWidget(web) - Temp.webWindow.setWindowIcon(QtGui.QIcon(iconPath)) - Temp.webWindow.show() - return''' - webbrowser.open_new_tab(url.url()) - - #QtCore.QUrl().url() - -# 显示“关于这个程序”窗口 -def about_this_program()->"显示“关于这个程序”窗口": - global about - global title - global iconPath - QT.message = QtWidgets.QMainWindow() - QT.message.setWindowIcon(QtGui.QIcon(iconPath)) - messageWidget = QtWidgets.QWidget() - QT.message.setWindowTitle(f"关于 {title}") - messageLayout = QtWidgets.QGridLayout() - messageLayout.addWidget(QtWidgets.QLabel(f""), 0, 0, 1, 1, QtCore.Qt.AlignTop) - aboutInfo = QtWidgets.QTextBrowser(messageWidget) - aboutInfo.setFocusPolicy(QtCore.Qt.NoFocus) - #aboutInfo.copyAvailable.connect(lambda: print("b")) - aboutInfo.anchorClicked.connect(OpenUrl) - aboutInfo.setOpenLinks(False) - aboutInfo.setHtml(about) - aboutInfo.setOpenExternalLinks(False) - messageLayout.addWidget(aboutInfo, 0, 1, 1, 1) - ok = QtWidgets.QPushButton(transla.transe("U", "确定")) - ok.clicked.connect(QT.message.close) - messageLayout.addWidget(ok, 1, 1, 1, 1, QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight) - messageWidget.setLayout(messageLayout) - QT.message.setCentralWidget(messageWidget) - QT.message.resize(int(messageWidget.frameGeometry().width() * 1.5), int(messageWidget.frameGeometry().height() * 1.5)) - QT.message.show() - -# 显示“提示”窗口 -def helps(): - global tips - QtWidgets.QMessageBox.information(widget, "提示", tips) - -# 显示更新内容窗口 -def UpdateThings(): - QtWidgets.QMessageBox.information(widget, "更新内容", updateThings) - -# 生成 desktop 文件在启动器 -def make_desktop_on_launcher(): - try: - if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容 - QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名") - return - if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine: - if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine,是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No: - DisableButton(False) - return - else: # 如果都有 - if os.path.exists(get_home() + "/.local/share/applications/" + combobox1.currentText() + ".desktop"): # 判断目录是否有该文件,如果有 - choose = QtWidgets.QMessageBox.question(widget, "提示", "文件已经存在,是否覆盖?") == QtWidgets.QMessageBox.Yes - if choose: # 如要覆盖 - os.remove(get_home() + "/.local/share/applications/" + combobox1.currentText() + ".desktop") # 删除该文件 - else: # 如不覆盖 - return # 结束 - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - option = "" - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - else: - option += "WINEDEBUG=FIXME,ERR,WARN,TRACE,Message " - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - value = "" - if e2.currentText()[:2].upper() == "C:": - value = f"{wineBottonPath}/drive_c/{e2.currentText()[2:]}".replace("\\", "/").replace("//", "/") - print(value) - iconPaths = iconPath - for i in iconList: - listValue = i[1].replace("wineBottonPath", wineBottonPath) - if listValue == e2.currentText() or listValue == value: - # 如果路径相同,即可以用程序对应的图标 - iconPaths = f"{programPath}/Icon/{i[0]}.svg" - # 读到了就不需要再读取了 - break - os.system(f"mkdir -p '{get_home()}/.local/share/applications/wine'") - write_txt(get_home() + "/.local/share/applications/wine/" + combobox1.currentText() + ".desktop", f'''[Desktop Entry] -Name={combobox1.currentText()} -Exec=env WINEPREFIX='{wineBottonPath}' {option} {wine[o1.currentText()]} '{e2.currentText()}' {setting["WineOption"]} {wineUsingOption} -Icon={iconPaths} -Type=Application -StartupNotify=true''') # 写入文本文档 - if len(shellHistory) == 0 or shellHistory[-1] != combobox1.currentText(): - shellHistory.append(combobox1.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json", str(json.dumps(ListToDictionary(shellHistory)))) # 将历史记录的数组转换为字典并写入 - combobox1.clear() - combobox1.addItems(shellHistory) - QtWidgets.QMessageBox.information(widget, "提示", "生成完成!") # 显示完成对话框 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", f"快捷方式创建失败,错误如下:\n{traceback.format_exc()}") - -def ConfigQemu(): - lists = [] - for i in qemuBottleList: - lists.append(f"{i[0]}/{i[1]}") - choose = QtWidgets.QInputDialog.getItem(window, "提示", "选择需要 Chroot 到里面的容器", lists, 0, False) - if not choose[1]: - return - threading.Thread(target=OpenTerminal, args=[f"python3 '{programPath}/QemuRun.py' '{choose[0]}' '{int(setting['QemuUnMountHome'])}' "]).start() - print(choose) - -# 生成 desktop 文件在桌面 -# (第四个按钮的事件) -def make_desktop_on_desktop(): - try: - if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容 - QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名") - return - if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine: - if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine,是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No: - DisableButton(False) - return - else: # 如果都有 - if os.path.exists(get_desktop_path() + "/" + combobox1.currentText() + ".desktop"): # 判断目录是否有该文件,如果有 - choose = QtWidgets.QMessageBox.question(widget, "提示", "文件已经存在,是否覆盖?") == QtWidgets.QMessageBox.Yes - if choose: # 如要覆盖 - os.remove(get_desktop_path() + "/" + combobox1.currentText() + ".desktop") # 删除该文件 - else: # 如不覆盖 - return # 结束 - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - wineUsingOption = "" - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - if not os.path.exists(get_desktop_path()): - os.makedirs(get_home()) - os.mknod(get_desktop_path() + "/" + combobox1.currentText() + ".desktop") - option = "" - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - value = "" - if e2.currentText()[:2].upper() == "C:": - value = f"{wineBottonPath}/drive_c/{e2.currentText()[2:]}".replace("\\", "/").replace("//", "/") - print(value) - iconPaths = iconPath - for i in iconList: - listValue = i[1].replace("wineBottonPath", wineBottonPath) - if listValue == e2.currentText() or listValue == value: - # 如果路径相同,即可以用程序对应的图标 - iconPaths = f"{programPath}/Icon/{i[0]}.svg" - # 读到了就不需要再读取了 - break - os.system(f"mkdir -p '{get_home()}/.local/share/applications/wine'") - write_txt(get_desktop_path() + "/" + combobox1.currentText() + ".desktop", f'''[Desktop Entry] -Name={combobox1.currentText()} -Exec=env WINEPREFIX='{wineBottonPath}' {option} {wine[o1.currentText()]} '{e2.currentText()}' {setting["WineOption"]} {wineUsingOption} -Icon={iconPaths} -Type=Application -StartupNotify=true''') # 写入文本文档 - if len(shellHistory) == 0 or shellHistory[-1] != combobox1.currentText(): - shellHistory.append(combobox1.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json", str(json.dumps(ListToDictionary(shellHistory)))) # 将历史记录的数组转换为字典并写入 - combobox1.clear() - combobox1.addItems(shellHistory) - QtWidgets.QMessageBox.information(widget, "提示", "生成完成!") # 显示完成对话框 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", f"快捷方式创建失败,错误如下:\n{traceback.format_exc()}") - -# 数组转字典 -def ListToDictionary(list): - dictionary = {} - for i in range(len(list)): - dictionary[i] = list[i] - return dictionary - -def CleanProgramHistory(): - if QtWidgets.QMessageBox.question(widget, "警告", "删除后将无法恢复,你确定吗?\n删除后软件将会自动重启。") == QtWidgets.QMessageBox.Yes: - try: - shutil.rmtree(get_home() + "/.config/deepin-wine-runner") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) - ReStartProgram() - -def CleanProgramCache(): - try: - shutil.rmtree(get_home() + "/.cache/deepin-wine-runner") - QtWidgets.QMessageBox.information(widget, "提示", "缓存清理完毕!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) - - -# 重启本应用程序 -def ReStartProgram(): - python = sys.executable - os.execl(python, python, * sys.argv) - -def KillAllProgram(): - pass - -def KillProgram(): - os.system(f"killall {wine[o1.currentText()]} -9") - os.system("killall winedbg -9") - exeName = os.path.basename(e2.currentText()) - os.system(f"killall {exeName} -9") - -def InstallWine(): - threading.Thread(target=OpenTerminal, args=[f"'{programPath}/AllInstall.py'"]).start() - -def InstallWineOnDeepin23(): - threading.Thread(target=OpenTerminal, args=[f"'{programPath}/InstallWineOnDeepin23.py'"]).start() - -class DllWindow(): - def ShowWindow(): - global dllMessage - global dllInfoMap - global textInfo - global dllName - dllMessage = QtWidgets.QWidget() - dllLayout = QtWidgets.QGridLayout() - try: - dllInfoMap["check"] - except: - try: - with open(f"{programPath}/CheckDLL/lists.json", "r") as file: - dllInfoMap = json.loads(file.read()) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(dllMessage, "错误", traceback.format_exc()) - # UI - dllName = QtWidgets.QLineEdit() - dllButton = QtWidgets.QPushButton("查询") - textInfo = QtWidgets.QTextBrowser() - dllButton.clicked.connect(DllWindow.Find) - dllLayout.addWidget(QtWidgets.QLabel("Dll 名称:"), 0, 0) - dllLayout.addWidget(dllName, 0, 1) - dllLayout.addWidget(dllButton, 0, 2) - dllLayout.addWidget(textInfo, 1, 0, 1, 3) - dllMessage.setWindowTitle(f"{title}——查询 Dll") - dllMessage.setLayout(dllLayout) - dllMessage.resize(int(dllMessage.frameGeometry().width() * 1.2), int(dllMessage.frameGeometry().height() * 1.1)) - dllMessage.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) - dllMessage.show() - - def Find(): - dllNameText = dllName.text().strip().lower() - if dllNameText[-4:] != ".dll": - dllNameText += ".dll" - try: - textInfo.setText(dllInfoMap[dllNameText]) - except: - textInfo.setText(f"未查询到有关 Dll '{dllNameText}' 有关的内容") - -def InstallWineOnDeepin23Alpha(): - threading.Thread(target=OpenTerminal, args=[f"'{programPath}/InstallWineOnDeepin23Alpha.py'"]).start() - -def InstallWineHQ(): - threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallNewWineHQ.sh"]).start() - -def OpenWineBotton(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - os.system("xdg-open \"" + wineBottonPath.replace("\'", "\\\'") + "\"") - -def OpenWineFontPath(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - QtWidgets.QMessageBox.information(widget, "提示", transla.transe("U", "如果安装字体?只需要把字体文件复制到此字体目录\n按下“OK”按钮可以打开字体目录")) - os.system("xdg-open \"" + wineBottonPath.replace("\'", "\\\'") + "/drive_c/windows/Fonts\"") - -def GetLoseDll(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - option = "" - if setting["MonoGeckoInstaller"]: - option += f"WINEDLLOVERRIDES=\"mscoree,mshtml=\" " - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - wineUsingOption = "" - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'") - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - threading.Thread(target=os.system, args=[f"python3 '{programPath}/CheckDLL/main.py' '{e2.currentText()}' '{wineBottonPath}' '{wine[o1.currentText()]}'" + setting["WineOption"]]).start() - -class RunWineProgramThread(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - showHistory = QtCore.pyqtSignal(str) - def __init__(self, wineProgram, history = False, Disbled = True): - super().__init__() - self.wineProgram = wineProgram - self.history = history - self.Disbled = Disbled - - def run(self): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - option = "" - if setting["MonoGeckoInstaller"]: - option += f"WINEDLLOVERRIDES=\"mscoree,mshtml=\" " - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - wineUsingOption = "" - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'") - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - if setting["TerminalOpen"]: - res = "" - OpenTerminal(f"env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption) - #res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - else: - res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # 实时读取程序返回 - if not setting["TerminalOpen"]: - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - self.signal.emit(text) - print(text, end="") - if self.history: - if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath: - findExeHistory.append(wineBottonPath) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json", str(json.dumps(ListToDictionary(findExeHistory)))) # 将历史记录的数组转换为字典并写入 - if len(wineBottonHistory) == 0 or wineBottonHistory[-1] != e2.currentText(): - wineBottonHistory.append(e2.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json", str(json.dumps(ListToDictionary(wineBottonHistory)))) # 将历史记录的数组转换为字典并写入 - self.showHistory.emit("") - if self.Disbled: - DisableButton(False) - - -runProgram = None -def RunWineProgram(wineProgram, history = False, Disbled = True): - global runProgram - DisableButton(True) - if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable(不推荐)" and o1.currentText() != "基于 UOS exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 UOS box86 的 deepin-wine6-stable": - if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine: - if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine,是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No: - DisableButton(False) - return - returnText.setText("") - runProgram = RunWineProgramThread(wineProgram, history, Disbled) - runProgram.signal.connect(QT.ShowWineReturn) - runProgram.showHistory.connect(QT.ShowHistory) - runProgram.start() - -class RunWinetricksThread(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - def __init__(self): - super().__init__() - - def run(self): - wineBottonPath = setting["DefultBotton"] - if not e1.currentText() == "": - wineBottonPath = e1.currentText() - option = "" - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - wineUsingOption = "" - if o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable": - wineUsingOption = "" - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - if setting["TerminalOpen"]: - res = "" - # 用终端开应该不用返回输出内容了 - OpenTerminal(f"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}") - #res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - else: - res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - # 实时读取程序返回 - while res.poll() is None: - try: - text = res.stdout.readline().decode("utf8") - except: - text = "" - self.signal.emit(text) - print(text, end="") - - - DisableButton(False) - -runWinetricks = None -def RunWinetricks(): - global runWinetricks - DisableButton(True) - if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable(不推荐)" and o1.currentText() != "基于 UOS exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 UOS box86 的 deepin-wine6-stable": - if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine: - DisableButton(False) - return - if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable": - if not os.path.exists(f"{programPath}/dlls-arm"): - if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dlls-arm.7z") - returnText.setText("") - runWinetricks = RunWinetricksThread() - runWinetricks.signal.connect(QT.ShowWineReturn) - runWinetricks.start() - -def CleanWineBottonByUOS(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{wine[o1.currentText()]}' '{programPath}/cleanbottle.sh' '{wineBottonPath}'") - -def FontAppStore(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{programPath}/launch.sh' '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}") - -def GetDllFromInternet(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{programPath}/launch.sh' '{programPath}/InstallDll.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def WineBottonAutoConfig(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - option = "" - if setting["Architecture"] != "Auto": - option += f"WINEARCH={setting['Architecture']} " - if setting["MonoGeckoInstaller"]: - option += f"WINEDLLOVERRIDES=\"mscoree,mshtml=\" " - if not setting["Debug"]: - option += "WINEDEBUG=-all " - else: - option += "WINEDEBUG=FIXME,ERR,WARN,TRACE,Message " - os.system(f"env WINEPREFIX='{wineBottonPath}' {option} WINE='{wine[o1.currentText()]}' '{programPath}/AutoConfig.py' '{wine[o1.currentText()]}' '{wineBottonPath}'") - -def InstallMonoGecko(program): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallMono.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {program} {int(setting['RuntimeCache'])}") - -def InstallNetFramework(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallNetFramework.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def InstallVB(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallVisualBasicRuntime.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def InstallVisualStudioCPlusPlus(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallVisualCPlusPlus.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def InstallMSXML(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallMsxml.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def InstallDXVK(): - if not os.path.exists(f"{programPath}/dxvk"): - if os.system(f"7z x -y \"{programPath}/dxvk.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dxvk.7z") - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/dxvk/setup_dxvk.sh' uninstall") - -def InstallVkd3d(): - if not os.path.exists(f"{programPath}/vkd3d-proton"): - if os.system(f"7z x -y \"{programPath}/vkd3d-proton.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/vkd3d-proton.7z") - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/vkd3d-proton/setup_vkd3d_proton.sh' install") - -def UninstallVkd3d(): - if not os.path.exists(f"{programPath}/vkd3d-proton"): - if os.system(f"7z x -y \"{programPath}/vkd3d-proton.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/vkd3d-proton.7z") - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/vkd3d-proton/setup_vkd3d_proton.sh' uninstall") - #process = QtCore.QProcess() - #process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e", - #"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", "bash", - #f"{programPath}/dxvk/setup_dxvk.sh", "install"]) - -def UninstallDXVK(): - if not os.path.exists(f"{programPath}/dxvk"): - if os.system(f"7z x -y \"{programPath}/dxvk.7z\" -o\"{programPath}\""): - QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") - return - os.remove(f"{programPath}/dxvk.7z") - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/dxvk/setup_dxvk.sh' uninstall") - #process = QtCore.QProcess() - #process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e", - #"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", - #f"{programPath}/dxvk/setup_dxvk.sh", "uninstall"]) - -def MiniAppStore(): - if e1.currentText()== "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/AppStore.py' '{wineBottonPath}' '{wine[o1.currentText()]}'") - -def InstallOther(): - if e1.currentText()== "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - OpenTerminal(f"'{programPath}/InstallOther.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") - -def BuildExeDeb(): - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - threading.Thread(target=os.system, args=[f"python3 '{programPath}/deepin-wine-packager.py' '{wineBottonPath}' '{wine[o1.currentText()]}'"]).start() - -def SetDeepinFileDialogDeepin(): - code = os.system(f"pkexec \"{programPath}/deepin-wine-venturi-setter.py\" deepin") - if code != 0: - if code == 1: - QtWidgets.QMessageBox.critical(widget, "错误", "无法更新配置:配置不准重复配置") - return - QtWidgets.QMessageBox.critical(widget, "错误", "配置失败") - return - QtWidgets.QMessageBox.information(widget, "提示", "设置完成!") - -def AddReg(): - path = QtWidgets.QFileDialog.getOpenFileName(window, "保存路径", get_home(), "reg文件(*.reg);;所有文件(*.*)") - if path[0] == "" and not path[1]: - return - RunWineProgram(f"regedit' /S '{path[0]}' 'HKEY_CURRENT_USER\Software\Wine\DllOverrides") - -def SaveDllList(): - path = QtWidgets.QFileDialog.getSaveFileName(window, "保存路径", get_home(), "reg文件(*.reg);;所有文件(*.*)") - if path[0] == "" and not path[1]: - return - RunWineProgram(f"regedit' /E '{path[0]}' 'HKEY_CURRENT_USER\Software\Wine\DllOverrides") - -def SetDeepinFileDialogDefult(): - code = os.system(f"pkexec \"{programPath}/deepin-wine-venturi-setter.py\" defult") - if code != 0: - if code == 1: - QtWidgets.QMessageBox.critical(widget, "错误", "无法更新配置:配置不准重复配置") - return - QtWidgets.QMessageBox.critical(widget, "错误", "配置失败") - return - QtWidgets.QMessageBox.information(widget, "提示", "设置完成!") - -def SetDeepinFileDialogRecovery(): - threading.Thread(target=OpenTerminal, args=[f"pkexec '{programPath}/deepin-wine-venturi-setter.py' recovery"]).start() - -def DeleteDesktopIcon(): - if os.path.exists(f"{get_home()}/.local/share/applications/wine"): - try: - shutil.rmtree(f"{get_home()}/.local/share/applications/wine") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) - return - QtWidgets.QMessageBox.information(widget, "提示", "删除完成") - -def DeleteWineBotton(): - if QtWidgets.QMessageBox.question(widget, "提示", "你确定要删除容器吗?删除后将无法恢复!\n如果没有选择 wine 容器,将会自动删除默认的容器!") == QtWidgets.QMessageBox.No: - return - if e1.currentText() == "": - wineBottonPath = setting["DefultBotton"] - else: - wineBottonPath = e1.currentText() - try: - shutil.rmtree(wineBottonPath) - QtWidgets.QMessageBox.information(widget, "提示", "删除完毕!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) - -def ThankWindow(): - # 直接显示关于窗口,关于窗口已经添加 - about_this_program() - -def InstallWineFont(): - # 筛选 apt - if not os.system("which aptss"): - threading.Thread(target=OpenTerminal, args=[f"sudo aptss install ms-core-fonts -y"]).start() - elif not os.system("which ss-apt-fast"): - threading.Thread(target=OpenTerminal, args=[f"sudo ss-apt-fast install ms-core-fonts -y"]).start() - elif not os.system("which apt-fast"): - threading.Thread(target=OpenTerminal, args=[f"sudo apt-fast install ms-core-fonts -y"]).start() - else: - threading.Thread(target=OpenTerminal, args=[f"sudo apt install ms-core-fonts -y"]).start() - -def WineRunnerBugUpload(): - threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start() - -def SetHttpProxy(): - QtWidgets.QMessageBox.information(window, "提示", "请在下面的对话框正确输入内容以便设置代理") - proxyServerAddress = QtWidgets.QInputDialog.getText(window, "提示", "请输入代理服务器地址")[0] - port = QtWidgets.QInputDialog.getText(window, "提示", "请输入代理服务器端口")[0] - if proxyServerAddress == "" or port == "": - return - RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings' /v ProxyEnable /t REG_DWORD /d 00000001 '/f") - RunWineProgram(f"reg' add 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings' /v ProxyServer /d '{proxyServerAddress}:{port}' '/f") - -def DisbledHttpProxy(): - RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings' /v ProxyEnable /t REG_DWORD /d 00000000 '/f") - -def GetScreenSize(): - screenInformation = [] - # 使用 xrandr 进行筛选 - for i in subprocess.getoutput("xrandr").split('\n'): - if not " connected " in i: # 检测连接的显示器 - continue - # 获取分辨率基本信息,如 - # DisplayPort-0 connected 1600x900+1280+0 (normal left inverted right x axis y axis) 434mm x 236mm - # 先判断是否为主屏幕 - main = False - if "primary" in i: - main = True - # 进行进一步筛选 - i = i[i.index("connected"):].replace("connected", "").replace("primary", "") - # 进行初步筛选,如 - # 1600x900+1280+0 (normal left inverted right x axis y axis) 434mm x 236mm - i = i[:i.index("(")].replace(" ", "") - # 筛选为 1600x900+0+0 进行最后数值的提取 - screenInformation.append([ - int(i[:i.index("x")]), # 获取宽度 - int(i[i.index("x") + 1 :i.index("+")]), # 获取高度 - int(i[i.index("+") + 1:].split('+')[0]), # 获取显示屏 X 坐标 - int(i[i.index("+") + 1:].split('+')[1]), # 获取显示屏 Y 坐标 - main # 是否为主屏幕 - ]) - return screenInformation # 返回结果 - -def UOSPackageScript(): - threading.Thread(target=os.system, args=[f"python3 '{programPath}/deepin-wine-packager-with-script.py'"]).start() - -def RunVM(): - threading.Thread(target=os.system, args=[f"bash '{programPath}/RunVM.sh'"]).start() - -def CleanProgram(): - OpenTerminal(f"{programPath}/clean-unuse-program.py") - -class UpdateWindow(): - data = {} - update = None - def ShowWindow(): - UpdateWindow.update = QtWidgets.QMainWindow() - updateWidget = QtWidgets.QWidget() - updateWidgetLayout = QtWidgets.QGridLayout() - versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:未知\n更新内容:") - updateText = QtWidgets.QTextBrowser() - updateText.anchorClicked.connect(OpenUrl) - updateText.setOpenExternalLinks(False) - ok = QtWidgets.QPushButton(transla.transe("U", "更新(更新时会自动关闭 Wine 运行器)")) - ok.clicked.connect(UpdateWindow.Update) - cancel = QtWidgets.QPushButton("取消") - cancel.clicked.connect(UpdateWindow.update.close) - url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-update-information/raw/branch/master/update.json" - try: - UpdateWindow.data = json.loads(requests.get(url).text) - versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:{UpdateWindow.data['Version']}\n更新内容:") - if UpdateWindow.data["Version"] == version: - updateText.setText("此为最新版本,无需更新") - ok.setDisabled(True) - else: - # 版本号读取(防止出现高版本号提示要“升级”到低版本号的问题) - localVersionList = version.split(".") - webVersionList = UpdateWindow.data['Version'].split(".") - for i in range(len(localVersionList)): - local = int(localVersionList[i]) - web = int(webVersionList[i]) - if web < local: - updateText.setHtml(f"""

此为最新版本,无需更新,但似乎您当前使用的程序版本比云端版本还要高。

-

出现这个问题可能会有如下几种情况:

-

1、使用编译或者内测版本

-

2、自己修改了程序版本

-

3、作者忘记更新云端上的更新信息了

-

如果是第三种情况,请反馈到此:https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I6T3FG

-

""") - ok.setDisabled(True) - break - if web > local: - updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n")) - ok.setEnabled(True) - break - - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(updateWidget, "错误", "无法连接服务器!") - updateWidgetLayout.addWidget(versionLabel, 0, 0, 1, 1) - updateWidgetLayout.addWidget(updateText, 1, 0, 1, 3) - updateWidgetLayout.addWidget(ok, 2, 2, 1, 1) - updateWidgetLayout.addWidget(cancel, 2, 1, 1, 1) - updateWidget.setLayout(updateWidgetLayout) - UpdateWindow.update.setCentralWidget(updateWidget) - UpdateWindow.update.setWindowTitle(transla.transe("U", "检查更新")) - UpdateWindow.update.resize(updateWidget.frameGeometry().width(), int(updateWidget.frameGeometry().height() * 1.5)) - UpdateWindow.update.show() - - def Update(): - if os.path.exists("/tmp/spark-deepin-wine-runner/update"): - shutil.rmtree("/tmp/spark-deepin-wine-runner/update") - os.makedirs("/tmp/spark-deepin-wine-runner/update") - try: - print(UpdateWindow.data["Url"]) - write_txt("/tmp/spark-deepin-wine-runner/update.sh", f"""#!/bin/bash -echo 删除多余的安装包 -rm -rfv /tmp/spark-deepin-wine-runner/update/* -echo 关闭“Wine 运行器” -python3 "{programPath}/updatekiller.py" -echo 下载安装包 -wget -P /tmp/spark-deepin-wine-runner/update {UpdateWindow.data["Url"][0]} -echo 安装安装包 -dpkg -i /tmp/spark-deepin-wine-runner/update/* -echo 修复依赖关系 -apt install -f -y -notify-send -i "{iconPath}" "更新完毕!" -zenity --info --text=\"更新完毕!\" --ellipsize -""") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(None, "出现错误,无法继续更新", traceback.format_exc()) - OpenTerminal("pkexec bash /tmp/spark-deepin-wine-runner/update.sh") - -class GetDllFromWindowsISO: - wineBottonPath = get_home() + "/.wine" - isoPath = None - dllList = None - message = None - dllFound = None - dllControl = None - foundButton = None - saveDll = None - setWineBotton = None - browser = None - mount = False - mountButton = None - dllListModel = None - arch = 0 - def ShowWindow(): - #DisableButton(True) - GetDllFromWindowsISO.message = QtWidgets.QMainWindow() - widget = QtWidgets.QWidget() - widgetLayout = QtWidgets.QGridLayout() - if not e1.currentText() == "": - GetDllFromWindowsISO.wineBottonPath = e1.currentText() - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", f"""提示: - 目前本提取功能暂只支持 NT 内核系统的官方安装镜像,不支持读取 ghost 等第三方封装方式的安装镜像 - 以及不要拷贝/替换太多的 dll,否则可能会导致 wine 容器异常,以及不要替换 Wine 的核心 dll - 最后,拷贝/替换 dll 后,建议点击下面“设置 wine 容器”按钮==》函数库 进行设置 -当前选择的 Wine 容器:{GetDllFromWindowsISO.wineBottonPath}""")), 0, 0, 1, 5) - isoLabel = QtWidgets.QLabel(transla.transe("U", "ISO镜像:")) - GetDllFromWindowsISO.isoPath = QtWidgets.QComboBox() - GetDllFromWindowsISO.browser = QtWidgets.QPushButton(transla.transe("U", "浏览")) - isoControl = QtWidgets.QWidget() - isoControlLayout = QtWidgets.QHBoxLayout() - isoControl.setLayout(isoControlLayout) - dllControl = QtWidgets.QWidget() - dllControlLayout = QtWidgets.QHBoxLayout() - dllControl.setLayout(dllControlLayout) - GetDllFromWindowsISO.mountButton = QtWidgets.QPushButton(transla.transe("U", "读取/挂载ISO镜像")) - umountButton = QtWidgets.QPushButton(transla.transe("U", "关闭/卸载ISO镜像")) - GetDllFromWindowsISO.dllFound = QtWidgets.QComboBox() - GetDllFromWindowsISO.foundButton = QtWidgets.QPushButton(transla.transe("U", "查找")) - GetDllFromWindowsISO.dllList = QtWidgets.QListView() - GetDllFromWindowsISO.saveDll = QtWidgets.QPushButton(transla.transe("U", "保存到 wine 容器中")) - GetDllFromWindowsISO.setWineBotton = QtWidgets.QPushButton(transla.transe("U", "设置 wine 容器")) - isoLabel.setSizePolicy(size) - GetDllFromWindowsISO.isoPath.setEditable(True) - GetDllFromWindowsISO.isoPath.addItems(isoPath) - GetDllFromWindowsISO.isoPath.setEditText("") - GetDllFromWindowsISO.browser.setSizePolicy(size) - GetDllFromWindowsISO.mountButton.setSizePolicy(size) - isoControlLayout.addWidget(GetDllFromWindowsISO.mountButton) - umountButton.setSizePolicy(size) - isoControlLayout.addWidget(umountButton) - GetDllFromWindowsISO.dllFound.setEditable(True) - GetDllFromWindowsISO.dllFound.addItems(isoPathFound) - GetDllFromWindowsISO.dllFound.setEditText("") - GetDllFromWindowsISO.saveDll.setSizePolicy(size) - dllControlLayout.addWidget(GetDllFromWindowsISO.saveDll) - GetDllFromWindowsISO.setWineBotton.setSizePolicy(size) - GetDllFromWindowsISO.DisbledDown(True) - dllControlLayout.addWidget(GetDllFromWindowsISO.setWineBotton) - widgetLayout.addWidget(isoLabel, 1, 0, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.isoPath, 1, 1, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.browser, 1, 2, 1, 1) - widgetLayout.addWidget(isoControl, 2, 1, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "查找DLL\n(为空则代表不查找,\n将显示全部内容):")), 3, 0, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.dllFound, 3, 1, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.foundButton, 3, 2, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.dllList, 4, 1, 1, 1) - widgetLayout.addWidget(dllControl, 5, 1, 1, 1) - widget.setLayout(widgetLayout) - GetDllFromWindowsISO.browser.clicked.connect(GetDllFromWindowsISO.Browser) - GetDllFromWindowsISO.mountButton.clicked.connect(GetDllFromWindowsISO.MountDisk) - umountButton.clicked.connect(GetDllFromWindowsISO.UmountDisk) - GetDllFromWindowsISO.foundButton.clicked.connect(GetDllFromWindowsISO.Found) - GetDllFromWindowsISO.saveDll.clicked.connect(GetDllFromWindowsISO.CopyDll) - GetDllFromWindowsISO.setWineBotton.clicked.connect(lambda: RunWineProgram("winecfg", Disbled=False)) - GetDllFromWindowsISO.message.setCentralWidget(widget) - GetDllFromWindowsISO.dllListModel = QtCore.QStringListModel() - GetDllFromWindowsISO.dllListModel.setStringList([]) - GetDllFromWindowsISO.dllList.setModel(GetDllFromWindowsISO.dllListModel) - GetDllFromWindowsISO.isoPath.currentText() - GetDllFromWindowsISO.message.setWindowTitle(f"Wine 运行器 {version}——从 ISO 提取 DLL") - GetDllFromWindowsISO.message.setWindowIcon(QtGui.QIcon(iconPath)) - GetDllFromWindowsISO.message.show() - - def DisbledUp(state): - GetDllFromWindowsISO.isoPath.setDisabled(state) - GetDllFromWindowsISO.browser.setDisabled(state) - GetDllFromWindowsISO.mountButton.setDisabled(state) - - - def DisbledDown(state): - GetDllFromWindowsISO.dllList.setDisabled(state) - GetDllFromWindowsISO.dllFound.setDisabled(state) - GetDllFromWindowsISO.saveDll.setDisabled(state) - GetDllFromWindowsISO.setWineBotton.setDisabled(state) - GetDllFromWindowsISO.foundButton.setDisabled(state) - - def Browser(): - path = QtWidgets.QFileDialog.getOpenFileName(GetDllFromWindowsISO.message, "选择 ISO 镜像文件", json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindISO.json"))["path"], "iso 镜像文件(*.iso);;ISO 镜像文件(*.ISO);;所有文件(*.*)")[0] - if path == None or path == "": - return - GetDllFromWindowsISO.isoPath.setEditText(path) - write_txt(get_home() + "/.config/deepin-wine-runner/FindISO.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件 - - def Found(): - found = GetDllFromWindowsISO.dllFound.currentText() - findList = [] - try: - if found == "": - # 显示所有内容 - # 下面内容需要分类讨论 - if GetDllFromWindowsISO.arch == 0: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if i[-3:] == "dl_": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 32: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 64: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.dllListModel.setStringList(findList) - return - if GetDllFromWindowsISO.arch == 0: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 32: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 64: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - if len(isoPath) == 0: - if isoPathFound[-1] != found: - isoPathFound.append(found) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json", str(json.dumps(ListToDictionary(isoPathFound)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.dllFound.clear() - GetDllFromWindowsISO.dllFound.addItems(isoPathFound) - GetDllFromWindowsISO.dllListModel.setStringList(findList) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.trans("错误"), traceback.format_exc()) - - - def MountDisk(): - if not os.path.exists(GetDllFromWindowsISO.isoPath.currentText()): - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.trans("错误"), transla.trans("您选择的 ISO 镜像文件不存在")) - return - if os.path.exists("/tmp/wine-runner-getdll"): - try: - os.rmdir("/tmp/wine-runner-getdll") - os.system("rm -rf /tmp/wine-runner-getdll-wim") - except: - # 如果无法删除可能是挂载了文件 - os.system("wimunmount /tmp/wine-runner-getdll-wim") - os.system("pkexec umount /tmp/wine-runner-getdll") - - try: - os.rmdir("/tmp/wine-runner-getdll") - os.rmdir("/tmp/wine-runner-getdll-wim") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc()) - return - os.makedirs("/tmp/wine-runner-getdll") - os.system(f"pkexec mount '{GetDllFromWindowsISO.isoPath.currentText()}' /tmp/wine-runner-getdll") - findList = [] - # 判断是新版的 Windows ISO(Windows Vista 及以上版本) - if os.path.exists("/tmp/wine-runner-getdll/sources/install.wim"): - # 如果没有安装 wimtools 的话 - if os.system("which wimmount") != 0: - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,因为没有安装 wimtools 以至无法读取") - return - # 是新版,挂载 wim - # 需要让用户选择挂载内容 - QtWidgets.QInputDialog.getMultiLineText(GetDllFromWindowsISO.message, "提示", "挂载文件需要用户记住并在下一个对话框输入 Index 以挂载正确的镜像,按下下方任意按钮即可继续", subprocess.getoutput("wiminfo '/tmp/wine-runner-getdll/sources/install.wim'")) - choose = QtWidgets.QInputDialog.getInt(GetDllFromWindowsISO.message, "提示", "请输入 Index") - if not choose[1]: - return - os.makedirs("/tmp/wine-runner-getdll-wim") - os.system(f"wimmount /tmp/wine-runner-getdll/sources/install.wim {choose[0]} /tmp/wine-runner-getdll-wim") - if os.path.exists("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - # 如果是 64 位镜像 - if QtWidgets.QInputDialog.getItem(GetDllFromWindowsISO.message, "选择位数", "选择位数(如果没有选择,默认为 64 位)", ["32", "64"], 1, False) == "32": - # 64 位镜像的 32 位是存在 SysWOW64 的 - try: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.dllListModel.setStringList(findList) - GetDllFromWindowsISO.arch = 32 - GetDllFromWindowsISO.DisbledDown(False) - GetDllFromWindowsISO.DisbledUp(True) - GetDllFromWindowsISO.mount = True - if len(isoPath) == 0 or isoPath[-1] != GetDllFromWindowsISO.isoPath.currentText(): - isoPath.append(GetDllFromWindowsISO.isoPath.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPath.json", str(json.dumps(ListToDictionary(isoPath)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.isoPath.clear() - GetDllFromWindowsISO.isoPath.addItems(isoPath) - return - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - try: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.arch = 64 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.dllListModel.setStringList(findList) - else: - try: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if i[-3:] == "dl_": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.arch = 0 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.dllListModel.setStringList(findList) - GetDllFromWindowsISO.DisbledDown(False) - GetDllFromWindowsISO.DisbledUp(True) - GetDllFromWindowsISO.mount = True - if len(isoPath) == 0 or isoPath[-1] != GetDllFromWindowsISO.isoPath.currentText(): - isoPath.append(GetDllFromWindowsISO.isoPath.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPath.json", str(json.dumps(ListToDictionary(isoPath)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.isoPath.clear() - GetDllFromWindowsISO.isoPath.addItems(isoPath) - #GetDllFromWindowsISO.isoPath['value'] = isoPath - - def UmountDisk(): - os.system("wimunmount /tmp/wine-runner-getdll-wim") - os.system("pkexec umount /tmp/wine-runner-getdll") - try: - shutil.rmtree("/tmp/wine-runner-getdll") - os.system("rm -rf /tmp/wine-runner-getdll-wim") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.transe("U", "错误"), f"关闭/卸载镜像失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.DisbledDown(True) - GetDllFromWindowsISO.DisbledUp(False) - GetDllFromWindowsISO.mount = False - QtWidgets.QMessageBox.information(GetDllFromWindowsISO.message, transla.transe("U", "提示"), transla.transe("U", "关闭/卸载成功!")) - - def CopyDll(): - choose = GetDllFromWindowsISO.dllList.selectionModel().selectedIndexes()[0].data() - if os.path.exists(f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}"): - if QtWidgets.QMessageBox.question(GetDllFromWindowsISO.message, "提示", f"DLL {choose} 已经存在,是否覆盖?") == QtWidgets.QMessageBox.No: - return - try: - # 要分类讨论 - if GetDllFromWindowsISO.arch == 0: - shutil.copy(f"/tmp/wine-runner-getdll/i386/{choose[:-1]}_", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - elif GetDllFromWindowsISO.arch == 32: - shutil.copy(f"/tmp/wine-runner-getdll-wim/Windows/SysWOW64/{choose[:-1]}l", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - elif GetDllFromWindowsISO.arch == 64: - shutil.copy(f"/tmp/wine-runner-getdll-wim/Windows/System32/{choose[:-1]}l", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - # 选择原装或优于内建 - if QtWidgets.QInputDialog.getItem(GetDllFromWindowsISO.message, "选择", "选择模式", ["原装先于内建", "原装"], 0, False) == "原装先于内建": - # 原装先于内建 - os.system(f"WINEPREFIX='{GetDllFromWindowsISO.wineBottonPath}' '{wine[o1.currentText()]}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(choose)[0]} /d native,builtin /f") - else: - # 原装 - os.system(f"WINEPREFIX='{GetDllFromWindowsISO.wineBottonPath}' '{wine[o1.currentText()]}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(choose)[0]} /d native /f") - QtWidgets.QMessageBox.information(GetDllFromWindowsISO.message, "提示", "提取成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc()) - -choose = None -class ProgramRunStatusShow(): - msgWindow = None - def ShowWindow(): - global choose - choose = None - dateVersion = "" - if not os.path.exists(e2.currentText()): - QtWidgets.QMessageBox.information(widget, "提示", "您输入的 exe 不存在") - return - try: - sha = ProgramRunStatusUpload.GetSHA1(e2.currentText()) - lists = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text) - r = requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8")) - r.encoding = "utf-8" - title = r.text - except: - choosemsg = QtWidgets.QMessageBox() - choosemsg.setText("""暂时还没有该软件的运行情况信息,请问需要?""") - choosemsg.setWindowTitle("提示") - def Choose(choices): - global choose - choose = choices - choosemsg.addButton("取消", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(0)) - choosemsg.addButton("提交评分", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(1)) - choosemsg.addButton("预测评分(不准确)", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(2)) - choosemsg.exec_() - if choose == None or choose == 0: - return - if choose == 1: - ProgramRunStatusUpload.ShowWindow(sha) - return - if choose == 2: - try: - lists = [0, 0, 0, 0, 0, 0, 0, 0] - info = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL0FJP1NIQTE9").decode("utf-8") + sha).text) - lists[int(info["Fen"])] = 1 - dateVersion = info["Version"] - title = "null" - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", "无法获取预测数值") - return - - - informationList = [ - "0分:无法运行并且也没有报错,自己无法解决", - "1分:无法运行但有报错,自己无法解决", - "2分:可以运行但是效果很差,几乎无法使用", - "3分:可以运行且勉强可以使用", - "4分:可以运行,体验大差不差,还是有点小问题", - "5分:可以运行且完全没有bug和问题,和在 Windows 上一样", - "含有不良内容,不宜安装", - "含有病毒、木马等对计算机有害的软件" - ] - try: - if title.lower() == "null": - title = "未知应用" - except: - title = "未知应用" - maxHead = lists.index(max(lists)) - ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - starLayout = QtWidgets.QHBoxLayout() - uploadButton = QtWidgets.QPushButton(transla.transe("U", "点此上传运行情况")) - uploadButton.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(sha, title)) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "综合评价:")), 0, 0) - msgWidgetLayout.addLayout(starLayout, 0, 1) - msgWidgetLayout.addWidget(QtWidgets.QLabel(informationList[maxHead]), 1, 0, 1, 2) - msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2) - msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2) - end = 5 - if maxHead > 5: - for i in range(end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - else: - for i in range(maxHead): - starLayout.addWidget(QtWidgets.QLabel(f"")) - head = maxHead - for i in range(head, end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusShow.msgWindow.setWindowTitle(f"应用“{title}”的运行情况") - ProgramRunStatusShow.msgWindow.show() - -class ProgramRunStatusUpload(): - msgWindow = None - starLayout = None - fen = None - starList = [] - sha1Value = "" - programName = None - def ChangeStar(): - if ProgramRunStatusUpload.fen.currentIndex() > 5: - for i in ProgramRunStatusUpload.starList: - i.setText(f"") - return - for i in range(ProgramRunStatusUpload.fen.currentIndex()): - ProgramRunStatusUpload.starList[i].setText(f"") - head = ProgramRunStatusUpload.fen.currentIndex() - end = len(ProgramRunStatusUpload.starList) - for i in range(head, end): - ProgramRunStatusUpload.starList[i].setText(f"") - - def ShowWindow(sha="", title=""): - ProgramRunStatusUpload.starList = [] - ProgramRunStatusUpload.sha1Value = sha - ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - ProgramRunStatusUpload.programName = QtWidgets.QLineEdit() - ProgramRunStatusUpload.fen = QtWidgets.QComboBox() - ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout() - upload = QtWidgets.QPushButton(transla.transe("U", "上传")) - upload.clicked.connect(ProgramRunStatusUpload.Upload) - if title != "": - ProgramRunStatusUpload.programName.setText(title) - ProgramRunStatusUpload.programName.setDisabled(True) - # 生成星星列表 - for i in [1, 1, 1, 1, 0]: - ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"")) - ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1]) - ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) - ProgramRunStatusUpload.programName.setPlaceholderText(transla.transe("U", "如果这个程序和程序名确实是合法还是检测到敏感词,改为“NULL”即可")) - ProgramRunStatusUpload.fen.addItems(["0分:无法运行并且也没有报错,自己无法解决", - "1分:无法运行但有报错,自己无法解决", - "2分:可以运行但是效果很差,几乎无法使用", - "3分:可以运行且勉强可以使用", - "4分:可以运行,体验大差不差,还是有点小问题", - "5分:可以运行且完全没有bug和问题,和在 Windows 上一样", - "含有不良内容,不宜安装", - "含有病毒、木马等对计算机有害的软件"]) - ProgramRunStatusUpload.fen.setCurrentIndex(4) - ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序名:")), 0, 0) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "评分:")), 1, 0) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.programName, 0, 1) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1) - msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1) - msgWidgetLayout.addWidget(upload, 3, 1) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusUpload.msgWindow.setWindowTitle(transla.transe("U", "上传程序运行情况")) - ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusUpload.msgWindow.show() - - def Upload(): - if not os.path.exists(e2.currentText()): - QtWidgets.QMessageBox.critical(None, "错误", "exe 文件不存在!") - return - if ProgramRunStatusUpload.programName.text() == "": - QtWidgets.QMessageBox.critical(None, "错误", "程序名称不能为空!") - return - try: - if ProgramRunStatusUpload.sha1Value == "": - ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText()) - QtWidgets.QMessageBox.information(None, transla.transe("U", "提示"), json.loads(requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUw").decode("utf-8"), { - "SHA1": ProgramRunStatusUpload.sha1Value, - "Name": ProgramRunStatusUpload.programName.text(), - "Fen": ProgramRunStatusUpload.fen.currentIndex(), - "Wine": o1.currentText() - }).text)["Error"]) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(None, transla.transe("U", "错误"), transla.transe("U", "数据上传失败!")) - - def GetSHA1(filePath): - sha1 = hashlib.sha1() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - sha1.update(readByte) - if not readByte: - break - file.close() - return sha1.hexdigest() - -class ProgramSetting(): - wineBottonA = None - wineDebug = None - defultWine = None - defultBotton = None - terminalOpen = None - wineOption = None - #wineBottonDifferent = None - centerWindow = None - message = None - theme = None - monogeckoInstaller = None - autoWine = None - runtimeCache = None - buildByBottleName = None - autoPath = None - qemuUnmountHome = None - chineseLanguage = None - def ShowWindow(): - ProgramSetting.message = QtWidgets.QMainWindow() - widget = QtWidgets.QWidget() - widgetLayout = QtWidgets.QGridLayout() - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "选择 Wine 容器版本:")), 0, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine DEBUG 信息输出:")), 1, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "默认 Wine:")), 2, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "默认 Wine 容器:")), 3, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "使用终端打开:")), 4, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "自定义 wine 参数:")), 5, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序主题:")), 6, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "Wine 默认 Mono 和 Gecko 安装器:")), 7, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "忽略未安装的 Wine:")), 8, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "下载缓存:")), 9, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "图标生成:")), 10, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "自动根据EXE名称生成路径:")), 11, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "Qemu + Chroot 挂载用户目录:")), 12, 0, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序翻译:")), 13, 0, 1, 1) - ProgramSetting.wineBottonA = QtWidgets.QComboBox() - ProgramSetting.wineDebug = QtWidgets.QCheckBox(transla.transe("U", "开启 DEBUG 输出")) - ProgramSetting.defultWine = QtWidgets.QComboBox() - ProgramSetting.defultBotton = QtWidgets.QLineEdit() - ProgramSetting.theme = QtWidgets.QComboBox() - ProgramSetting.theme.addItems(QtWidgets.QStyleFactory.keys()) - ProgramSetting.theme.setCurrentText(setting["Theme"]) - save = QtWidgets.QPushButton(transla.transe("U", "保存")) - save.clicked.connect(ProgramSetting.Save) - defultBottonButton = QtWidgets.QPushButton(transla.transe("U", "浏览")) - defultBottonButton.clicked.connect(ProgramSetting.Browser) - themeTry = QtWidgets.QPushButton(transla.transe("U", "测试(重启后变回设置的主题)")) - themeTry.clicked.connect(ProgramSetting.Try) - ProgramSetting.terminalOpen = QtWidgets.QCheckBox(transla.transe("U", "使用终端打开(deepin 终端)")) - ProgramSetting.wineOption = QtWidgets.QLineEdit() - ProgramSetting.monogeckoInstaller = QtWidgets.QCheckBox(transla.transe("U", "屏蔽 Wine 默认 Mono 和 Gecko 安装器")) - ProgramSetting.autoWine = QtWidgets.QCheckBox(transla.transe("U", "不显示未检测到的 Wine")) - ProgramSetting.runtimeCache = QtWidgets.QCheckBox(transla.transe("U", "开启下载缓存")) - ProgramSetting.buildByBottleName = QtWidgets.QCheckBox(transla.transe("U", "本软件构建的图标后面添加容器名")) - ProgramSetting.autoPath = QtWidgets.QCheckBox(transla.transe("U", "自动根据文件名生成容器路径(开启后必须通过修改默认wine容器路径才可指定其它路径,重启程序后生效)")) - ProgramSetting.qemuUnmountHome = QtWidgets.QCheckBox(transla.transe("U", "使用 Qemu + Chroot 时不挂载用户目录并与系统隔离(修改后重启操作系统生效)")) - ProgramSetting.chineseLanguage = QtWidgets.QCheckBox(transla.transe("U", "禁用程序界面翻译")) - ProgramSetting.wineBottonA.addItems(["Auto", "win32", "win64"]) - ProgramSetting.wineBottonA.setCurrentText(setting["Architecture"]) - ProgramSetting.wineDebug.setChecked(setting["Debug"]) - ProgramSetting.defultWine.addItems(wine.keys()) - ProgramSetting.defultWine.setCurrentText(setting["DefultWine"]) - ProgramSetting.defultBotton.setText(setting["DefultBotton"]) - ProgramSetting.terminalOpen.setChecked(setting["TerminalOpen"]) - ProgramSetting.wineOption.setText(setting["WineOption"]) - ProgramSetting.monogeckoInstaller.setChecked(setting["MonoGeckoInstaller"]) - ProgramSetting.autoWine.setChecked(setting["AutoWine"]) - ProgramSetting.runtimeCache.setChecked(setting["RuntimeCache"]) - ProgramSetting.buildByBottleName.setChecked(setting["BuildByBottleName"]) - ProgramSetting.autoPath.setChecked(setting["AutoPath"]) - ProgramSetting.qemuUnmountHome.setChecked(setting["QemuUnMountHome"]) - ProgramSetting.chineseLanguage.setChecked(setting["Chinese"]) - # QemuUnMountHome - widgetLayout.addWidget(ProgramSetting.wineBottonA, 0, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.wineDebug, 1, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.defultWine, 2, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.defultBotton, 3, 1, 1, 1) - widgetLayout.addWidget(defultBottonButton, 3, 2, 1, 1) - widgetLayout.addWidget(ProgramSetting.terminalOpen, 4, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.wineOption, 5, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.theme, 6, 1, 1, 1) - widgetLayout.addWidget(themeTry, 6, 2, 1, 1) - widgetLayout.addWidget(ProgramSetting.monogeckoInstaller, 7, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.autoWine, 8, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.runtimeCache, 9, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.buildByBottleName, 10, 1, 1, 1) - widgetLayout.addWidget(ProgramSetting.autoPath, 11, 1, 1, 2) - widgetLayout.addWidget(ProgramSetting.qemuUnmountHome, 12, 1, 1, 2) - widgetLayout.addWidget(ProgramSetting.chineseLanguage, 13, 1, 1, 2) - widgetLayout.addWidget(save, 14, 2, 1, 1) - widget.setLayout(widgetLayout) - ProgramSetting.message.setCentralWidget(widget) - ProgramSetting.message.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramSetting.message.setWindowTitle(f"设置 wine 运行器 {version}") - ProgramSetting.message.show() - - def Browser(): - path = QtWidgets.QFileDialog.getExistingDirectory(ProgramSetting.message, transla.transe("U", "选择 Wine 容器"), json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineBotton.json"))["path"]) - if path == "" or path == None or path == "()" or path == (): - return - ProgramSetting.defultBotton.setText(path) - - def Try(): - app.setStyle(QtWidgets.QStyleFactory.create(ProgramSetting.theme.currentText())) - - def Save(): - # 写入容器位数设置 - setting["Architecture"] = ProgramSetting.wineBottonA.currentText() - setting["Debug"] = ProgramSetting.wineDebug.isChecked() - setting["DefultWine"] = ProgramSetting.defultWine.currentText() - setting["DefultBotton"] = ProgramSetting.defultBotton.text() - setting["TerminalOpen"] = ProgramSetting.terminalOpen.isChecked() - setting["WineOption"] = ProgramSetting.wineOption.text() - setting["Theme"] = ProgramSetting.theme.currentText() - setting["MonoGeckoInstaller"] = ProgramSetting.monogeckoInstaller.isChecked() - setting["AutoWine"] = ProgramSetting.autoWine.isChecked() - setting["RuntimeCache"] = ProgramSetting.runtimeCache.isChecked() - setting["BuildByBottleName"] = ProgramSetting.buildByBottleName.isChecked() - setting["AutoPath"] = ProgramSetting.autoPath.isChecked() - setting["QemuUnMountHome"] = ProgramSetting.qemuUnmountHome.isChecked() - setting["Chinese"] = ProgramSetting.chineseLanguage.isChecked() - try: - write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting)) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(ProgramSetting.message, "错误", traceback.format_exc()) - return - QtWidgets.QMessageBox.information(ProgramSetting.message, "提示", "保存完毕!") - -class ValueCheck(): - def __init__(self): - pass - - def BASE64(self, filePath): - src = "" - with open(filePath, "rb") as f: - base64Byte = base64.b64encode(f.read()) - src += base64Byte.decode("utf-8") - return src - - def SHA1(self, filePath): - sha1 = hashlib.sha1() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - sha1.update(readByte) - if not readByte: - break - file.close() - return sha1.hexdigest() - - def MD5(self, filePath): - md5 = hashlib.md5() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - md5.update(readByte) - if not readByte: - break - file.close() - return md5.hexdigest() - - def SHA256(self, filePath): - value = hashlib.sha256() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - value.update(readByte) - if not readByte: - break - file.close() - return value.hexdigest() - - def SHA384(self, filePath): - value = hashlib.sha384() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - value.update(readByte) - if not readByte: - break - file.close() - return value.hexdigest() - - def SHA224(self, filePath): - value = hashlib.sha224() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - value.update(readByte) - if not readByte: - break - file.close() - return value.hexdigest() - - def SHA512(self, filePath): - value = hashlib.sha512() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - value.update(readByte) - if not readByte: - break - file.close() - return value.hexdigest() - - link = { - "SHA1": SHA1, - "MD5": MD5, - "SHA256": SHA256, - "SHA512": SHA512, - "SHA224": SHA224, - "SHA384": SHA384, - "BASE64": BASE64 - } - - def Get(self, types): - QtWidgets.QMessageBox.information(window, "提示", "在计算过程中,程序可能会出现无响应的问题,请稍后\n请在接下来的打开对话框中选择要计算的文件") - file = QtWidgets.QFileDialog.getOpenFileName(window, "打开")[0] - if file == "": - return - try: - value = self.link[types](self, file) - if QtWidgets.QInputDialog.getText(window, "值", "下面是计算得到的值,是否要复制到剪切板?", QtWidgets.QLineEdit.Normal, value)[1]: - pyperclip.copy(value) - QtWidgets.QMessageBox.information(window, "提示", "复制成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - -def ChangePath(): - e1.setCurrentText(f'{setting["DefultBotton"]}/{os.path.splitext(os.path.basename(e2.currentText()))[0]}') - -def UploadLog(): - if QtWidgets.QMessageBox.question(window, "提示", "您确定要上传吗?上传内容将不会公开,将用于加强日志分析功能") == QtWidgets.QMessageBox.Yes: - text = QtWidgets.QInputDialog.getMultiLineText(window, "输入内容", "输入描述信息") - try: - returnList = requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL2xvZw==").decode("utf-8"), { - "Log": returnText.toPlainText(), - "Wine": wine[o1.currentText()], - "Tips": text - }).json() - if returnList["ExitCode"] == 0: - QtWidgets.QMessageBox.information(window, "提示", "上传成功!") - else: - print(returnList) - QtWidgets.QMessageBox.critical(window, "错误", "上传失败!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", "上传失败!") - - -def SaveLog(): - path = QtWidgets.QFileDialog.getSaveFileName(window, "保存日志", get_home(), "txt文件(*.txt);;html 文件(*.html);;所有文件(*.*))") - if not path[1]: - return - print(path) - try: - with open(path[0], "w") as file: - if path[1] == "html 文件(*.html)": - file.write(returnText.toHtml()) - else: - file.write(returnText.toPlainText()) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - -def GetNewInformation(): - try: - text = requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/information/index.html").text - except: - traceback.print_exc() - text = f"""

无法连接到服务器

-
-

你可以尝试:

-

1. 判断是否能正常连接网络

-

2. 作者的服务出问题了?(到这反馈:https://gitee.com/gfdgd-xi/deep-wine-runner/issues

-

3. 玩个游戏解闷下

""" - global webInformation - if bad: - webInformation = QtWidgets.QTextBrowser() - else: - webInformation = QtWebEngineWidgets.QWebEngineView() - webInformation.setHtml(text) - webInformation.setWindowTitle("获取程序公告") - webInformation.setWindowIcon(QtGui.QIcon(iconPath)) - webInformation.resize(int(webInformation.frameGeometry().width() * 1.3), int(webInformation.frameGeometry().height() * 1.1)) - webInformation.show() - -def getFileFolderSize(fileOrFolderPath): - """get size for file or folder""" - totalSize = 0 - try: - if not os.path.exists(fileOrFolderPath): - return totalSize - if os.path.isfile(fileOrFolderPath): - totalSize = os.path.getsize(fileOrFolderPath) # 5041481 - return totalSize - if os.path.isdir(fileOrFolderPath): - with os.scandir(fileOrFolderPath) as dirEntryList: - for curSubEntry in dirEntryList: - curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name) - if curSubEntry.is_dir(): - curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007 - totalSize += curSubFolderSize - elif curSubEntry.is_file(): - curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891 - totalSize += curSubFileSize - return totalSize - except: - return totalSize - -# 获取当前语言 -def get_now_lang()->"获取当前语言": - return os.getenv('LANG') - -# 又需要修复多线程导致的控件问题 -def AddDockerMenu(): - global dockers - global openFileManager - global openTerminal - dockers = menu.addMenu("该 Docker 基础管理") - openFileManager = QtWidgets.QAction("打开默认文件管理器") - openTerminal = QtWidgets.QAction("打开默认终端") - openFileManager.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"xdg-open '{get_home()}'"]).start()) - openTerminal.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"x-terminal-emulator"]).start()) - dockers.addAction(openFileManager) - dockers.addAction(openTerminal) -newPackage = False -class GetVersionThread(QtCore.QThread): - signal = QtCore.pyqtSignal(str) - def __init__(self) -> None: - super().__init__() - - def run(self): - global about - global window - global newPackage - global programVersionType - # 目前分为几个版本(在 control 文件区分): - # 星火版本:~spark - # 商店版本:~uos - # 编译版本:无版本号 - # Gitee/Github……:正常版本 - # Docker 版本 - programVersionTypeLnk = { - "spark": "普通版本", - "uos": "普通版本" - } - # 直接判断是不是 Docker 版本 - if os.path.exists(f"{programPath}/docker.txt") or os.path.exists("/.dockerenv"): - programVersionType = "普通版本" - self.signal.emit("") - else: - programVersionType = "从源码运行的版本" - try: - if not os.path.exists("/var/lib/dpkg/status"): - print("无 dpkg,结束") - file = open("/var/lib/dpkg/status", "r") - fileName = file.read().splitlines() - package = False - for i in range(0, len(fileName)): - if fileName[i] == "Package: spark-deepin-wine-runner-docker": - programVersionType = "普通版本" - #AddDockerMenu() - self.signal.emit("") - break - if fileName[i] == "Package: spark-deepin-wine-runner-52": - programVersionType = "普通版本" - newPackage = False - break - if fileName[i] == "Package: spark-deepin-wine-runner": - package = True - newPackage = True - continue - if fileName[i] == "Package: wine-runner-linux": - package = True - continue - if not package: - continue - if fileName[i].replace(" ", "").replace("\n", "") == "": - # 空行,不再考虑 - break - # 搜索版本号 - try: - if fileName[i][:fileName[i].index(":")] == "Version": - version = fileName[i][fileName[i].index(":") + 1:].strip() - print(f"版本号为:{version}") - if not "-" in version: - programVersionType = "普通版本" - break - programVersionType = version[version.index("-") + 1:] - print(programVersionType) - if "-" in programVersionType: - # 考虑到如 2.1.0-2-spark 的情况 - programVersionType = programVersionType[programVersionType.index("-") + 1:] - try: - programVersionType = programVersionTypeLnk[programVersionType] - except: - programVersionType = "普通版本" - break - except: - traceback.print_exc() - continue - except: - print("无法读取,当没有处理") - print(programVersionType) - about = about.replace("@VersionForType@", programVersionType) - # 获取程序体积 - about = about.replace("@programSize@", str(int(getFileFolderSize(programPath) / 1024 / 1024))) - -def GetVersion(): - global runVersion - runVersion = GetVersionThread() - runVersion.signal.connect(AddDockerMenu) - runVersion.start() - -def UnPackage(): - QtWidgets.QMessageBox.information(window, "提示", "请在下面两个对话框中选择 deb 包所在路径和容器解压到的路径") - debPath = QtWidgets.QFileDialog.getOpenFileName(window, get_home(), "deb 文件(*.deb);;所有文件(*.*)") - if not debPath[1]: - return - path = QtWidgets.QFileDialog.getExistingDirectory(window, get_home()) - print(path) - if not path: - return - tempDebDir = f"/tmp/wine-runner-unpack-deb-{random.randint(0, 1000)}" - if os.system(f"dpkg -x '{debPath[0]}' '{tempDebDir}'"): - QtWidgets.QMessageBox.critical(window, "错误", "解压失败!") - return - zippath = FindFile(tempDebDir, "files.7z") - if zippath == None: - QtWidgets.QMessageBox.critical(window, "错误", "解压失败!") - return - print(path) - # 解压文件 - os.system(f"mkdir -p '{path}'") - os.system(f"7z x -y '{zippath}' -o'{path}'") - os.system(f"rm -rfv '{tempDebDir}'") - QtWidgets.QMessageBox.information(window, "提示", "解压完成!") - -def FindFile(file, name): - for i in os.listdir(file): - path = f"{file}/{i}" - if os.path.isdir(path): - returnPath = FindFile(path, name) - if returnPath != None: - return returnPath.replace("//", "/") - if os.path.isfile(path): - if i == name: - return path - return None - -def TransLog(): - oldText = returnText.toPlainText() - lineNumber = 0 - transText = "" - chooseText = "" - for i in oldText.splitlines(): - lineNumber += 1 - chooseText += f"{i}\n" - if lineNumber >= 50: - lineNumber = 0 - try: - data = { 'doctype': 'json', 'type': 'auto','i': chooseText.replace("\n\n", "\n")} - jsonReturn = requests.post("http://fanyi.youdao.com/translate", data=data).json()["translateResult"] - for i in jsonReturn: - print(i) - transText += f'{i[0]["tgt"]}\n' - chooseText = "" - except: - transText += f"{chooseText}\n" - chooseText = "" - if lineNumber != 0: - lineNumber = 0 - try: - data = { 'doctype': 'json', 'type': 'auto','i': chooseText.replace("\n\n", "\n")} - jsonReturn = requests.post("http://fanyi.youdao.com/translate", data=data).json()["translateResult"] - for i in jsonReturn: - print(i[0]) - transText += f'{i[0]["tgt"]}\n' - chooseText = "" - except: - transText += f"{chooseText}\n" - chooseText = "" - #return transText - returnText.setText(transText.replace("\n\n", "\n")) - -########################### -# 加载配置 -########################### -defultProgramList = { - "Architecture": "Auto", - "Debug": True, - "DefultWine": "deepin-wine6 stable", - "DefultBotton" : get_home() + "/.wine", - "TerminalOpen": False, - "WineOption": "", - "WineBottonDifferent": False, - "CenterWindow": False, - "Theme": "", - "MonoGeckoInstaller": False, - "AutoWine": True, - "RuntimeCache": True, - "MustRead": False, - "BuildByBottleName": False, - "AutoPath": False, - "QemuUnMountHome": False, - "Chinese": True -} -if not os.path.exists(get_home() + "/.config/"): # 如果没有配置文件夹 - os.mkdir(get_home() + "/.config/") # 创建配置文件夹 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹 - os.mkdir(get_home() + "/.config/deepin-wine-runner") # 创建配置文件夹 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/ShellHistory.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json", json.dumps({})) # 创建配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json", json.dumps({})) # 创建配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json", json.dumps({})) # 创建配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/ISOPath.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPath.json", json.dumps({})) # 写入(创建)一个配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json", json.dumps({})) # 写入(创建)一个配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/FindExe.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/FindExe.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/FindISO.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/FindISO.json", json.dumps({"path": "~"})) # 写入(创建)一个配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/WineBotton.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/WineBotton.json", json.dumps({"path": "~/.deepinwine"})) # 写入(创建)一个配置文件 -if not os.path.exists(get_home() + "/.config/deepin-wine-runner/WineSetting.json"): # 如果没有配置文件 - write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(defultProgramList)) # 写入(创建)一个配置文件 - -########################### -# 设置变量 -########################### -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -# 如果要添加其他 wine,请使用安装更多 Wine 功能 -############# -# 检测 Wine -############# -try: - wine = { - "基于 UOS box86 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ", - "基于 UOS exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ", - "使用 Flatpak 安装的 Wine": "flatpak run org.winehq.Wine", - "deepin-wine6 stable": "deepin-wine6-stable", - "deepin-wine5 stable": "deepin-wine5-stable", - "spark-wine7-devel": "spark-wine7-devel", - "spark-wine8": "spark-wine8", - "deepin-wine": "deepin-wine", - "deepin-wine5": "deepin-wine5", - "wine": "wine", - "wine64": "wine64", - "ukylin-wine": "ukylin-wine", - "mono(这不是 wine,但可以实现初步调用运行 .net 应用)": "mono", - "基于 linglong 的 deepin-wine6-stable(不推荐)": f"ll-cli run '' --exec '/bin/deepin-wine6-stable'" - } - untipsWine = ["使用 Flatpak 安装的 Wine", "基于 exagear 的 deepin-wine6-stable", "基于 UOS box86 的 deepin-wine6-stable", "基于 UOS exagear 的 deepin-wine6-stable", "基于 linglong 的 deepin-wine6-stable(不推荐)"] - canUseWine = [] - if os.path.exists("/opt/deepin-box86/box86") and os.path.exists("/opt/deepin-wine6-stable/bin/wine"): - canUseWine.append("基于 UOS box86 的 deepin-wine6-stable") - if os.path.exists("/opt/exagear/bin/ubt_x64a64_al") and os.path.exists("/opt/deepin-wine6-stable/bin/wine"): - canUseWine.append("基于 UOS exagear 的 deepin-wine6-stable") - if not os.system("which exagear") and os.path.exists("/opt/deepin-wine6-stable/bin/wine"): - canUseWine.append("基于 exagear 的 deepin-wine6-stable") - for i in wine.keys(): - if not os.system(f"which '{wine[i]}'"): - canUseWine.append(i) - if not os.system("which flatpak") and os.path.exists("/var/lib/flatpak/app/org.winehq.Wine"): - canUseWine.append("使用 Flatpak 安装的 Wine") - - if os.path.exists("/persistent/linglong/layers/"): # 判断是否使用 linglong - for i in os.listdir("/persistent/linglong/layers/"): - try: - dire = os.listdir(f"/persistent/linglong/layers/{i}")[-1] - arch = os.listdir(f"/persistent/linglong/layers/{i}/{dire}")[-1] - if os.path.exists(f"/persistent/linglong/layers/{i}/{dire}/{arch}/runtime/bin/deepin-wine6-stable"): - wine["基于 linglong 的 deepin-wine6-stable(不推荐)"] = f"ll-cli run {i} --exec '/bin/deepin-wine6-stable'" - canUseWine.append("基于 linglong 的 deepin-wine6-stable(不推荐)") - break - except: - pass - # 读取自定义安装的 Wine(需要解包的才能使用) - qemuBottleList = [] - qemuPath = f"{get_home()}/.deepin-wine-runner-ubuntu-images" - if not os.system("which qemu-i386-static"): - if os.path.exists(qemuPath): - for g in os.listdir(qemuPath): - archPath = f"{qemuPath}/{g}" - arch = g - if os.path.isdir(archPath): - for d in os.listdir(archPath): - bottlePath = f"{archPath}/{d}" - if os.path.isdir(bottlePath): - qemuBottleList.append([ - arch, - d, - bottlePath - ]) - shellHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json")).values()) - findExeHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json")).values()) - wineBottonHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json")).values()) - isoPath = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ISOPath.json")).values()) - isoPathFound = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json")).values()) - setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json")) - change = False - if not os.path.exists(get_home() + "/.config/deepin-wine-runner/mono-lock"): - os.mknod(f"{get_home()}/.config/deepin-wine-runner/mono-lock") - setting["MonoGeckoInstaller"] = False - change = True - for i in defultProgramList.keys(): - if not i in setting: - change = True - setting[i] = defultProgramList[i] - if change: - write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting)) - try: - # Read /opt Wine - for i in os.listdir("/opt"): - pass - # 不再从列表读取,直接读目录 - for i in os.listdir(f"{programPath}/wine/"): - #for i in json.loads(readtxt(f"{programPath}/wine/winelist.json")): - if os.path.exists(f"{programPath}/wine/{i}") and os.path.isdir(f"{programPath}/wine/{i}"): - name = "" - qemuInstall = False - nameValue = [["", ""]] - try: - if os.path.exists("/opt/deepin-box86/box86"): - nameValue.append( - [ - "基于 UOS box86 的 ", - f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 " - ] - ) - if os.system("which box86") == 0: - nameValue.append( - [ - "基于 box86 的 ", - f"box86 " - ] - ) - if os.system("which box64") == 0: - nameValue.append( - [ - "基于 box64 的 ", - f"box64 " - ] - ) - if os.system("which exagear") == 0: - nameValue.append( - [ - "基于 exagear 的 ", - f"exagear " - ] - ) - if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"): - nameValue.append( - [ - "基于 UOS exagear 的 ", - f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- " - ] - ) - for g in qemuBottleList: - nameValue.append([ - f"使用qemu-{g[0]}-static 调用容器{g[1]}运行 ", - f"python3 '{programPath}/QemuRun.py' '{g[0]}/{g[1]}' {int(setting['QemuUnMountHome'])} " - ]) - except: - traceback.print_exc() - for k in nameValue: - print(k) - if "qemu" in k[0]: - chrootProgramPath = "/opt/apps/deepin-wine-runner" - else: - chrootProgramPath = programPath - if os.path.exists(f"{programPath}/wine/{i}/bin/wine"): - wine[f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine"] = f"{k[1]}{chrootProgramPath}/wine/{i}/bin/wine" - canUseWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine") - untipsWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine") - if os.path.exists(f"{programPath}/wine/{i}/bin/wine64"): - wine[f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine64"] = f"{k[1]}{chrootProgramPath}/wine/{i}/bin/wine64" - canUseWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine64") - untipsWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine64") - if os.path.exists(f"{programPath}/wine/{i}/bin/wine-i386"): - wine[f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-i386"] = f"{k[1]}{chrootProgramPath}/wine/{i}/bin/wine-i386" - canUseWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-i386") - untipsWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-i386") - if os.path.exists(f"{programPath}/wine/{i}/bin/wine-aarch64"): - wine[f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-aarch64"] = f"{k[1]}{chrootProgramPath}/wine/{i}/bin/wine-aarch64" - canUseWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-aarch64") - untipsWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-aarch64") - if os.path.exists(f"{programPath}/wine/{i}/bin/wine-x86_64"): - wine[f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-x86_64"] = f"{k[1]}{chrootProgramPath}/wine/{i}/bin/wine-x86_64" - canUseWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-x86_64") - untipsWine.append(f"{k[0]}{chrootProgramPath}/wine/{i}/bin/wine-x86_64") - except: - pass - try: - for i in os.listdir(f"{get_home()}/.deepinwine/"): - if os.path.exists(f"{get_home()}/.deepinwine/{i}/bin/wine"): - wine[f"{get_home()}/.deepinwine/{i}/bin/wine"] = f"{get_home()}/.deepinwine/{i}/bin/wine" - canUseWine.append(f"{get_home()}/.deepinwine/{i}/bin/wine") - if os.path.exists(f"{get_home()}/.deepinwine/{i}/bin/wine64"): - wine[f"{get_home()}/.deepinwine/{i}/bin/wine64"] = f"{get_home()}/.deepinwine/{i}/bin/wine64" - canUseWine.append(f"{get_home()}/.deepinwine/{i}/bin/wine64") - except: - pass -except: - traceback.print_exc() - app = QtWidgets.QApplication(sys.argv) - QtWidgets.QMessageBox.critical(None, "错误", f"无法读取配置,无法继续\n{traceback.format_exc()}") - sys.exit(1) - -# transla.transe - -programVersionType = "" -print(wine) -########################### -# 程序信息 -########################### -# 语言载入 -if not "zh_CN".lower() in get_now_lang().lower() and not setting["Chinese"]: - transla = Trans("en_US", f"{programPath}/trans/deepin-wine-runner.json") -else: - transla = Trans("zh_CN") -iconPath = "{}/deepin-wine-runner.svg".format(programPath) -#iconPath = "{}/Icon/Program/wine运行器.png".format(programPath) -programUrl = "https://gitee.com/gfdgd-xi/deep-wine-runner\nhttps://github.com/gfdgd-xi/deep-wine-runner\nhttps://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner\nhttps://gfdgd-xi.github.io" -information = json.loads(readtxt(f"{programPath}/information.json")) -version = information["Version"] -goodRunSystem = transla.transe("U", "常见 Linux 发行版") -thankText = "" -tips = transla.transe("U", '''

提示:

-1、使用终端运行该程序,可以看到 wine 以及程序本身的提示和报错; -2、wine 32 位和 64 位的容器互不兼容; -3、所有的 wine 和 winetricks 均需要自行安装(可以从 菜单栏=>程序 里面进行安装); -4、本程序支持带参数运行 wine 程序(之前版本也可以),只需要按以下格式即可: -exe路径\' 参数 \' -即可(单引号需要输入); -5、wine 容器如果没有指定,则会默认为 ~/.wine; -6、如果可执行文件比较大的话,会出现点击“获取该程序运行情况”出现假死的情况,因为正在后台读取 SHA1,只需要等一下即可(读取速度依照您电脑处理速度、读写速度、可执行文件大小等有关); -7、对于非 X86 的用户来说,请不要使用本程序自带的 Wine 安装程序和 Windows 虚拟机安装功能(检测到为非 X86 架构会自动禁用); -8、如果非 X86 的用户的 UOS 专业版用户想要使用的话,只需要在应用商店安装一个 Wine 版本微信即可在本程序选择正确的 Wine 运行程序; -9、在使用 linglong 包的 Wine 应用时,必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项, -而程序识别到的 Wine 是按 linglong 的使用 Wine 软件包名的字母排序第一个的 Wine,且生成的容器不在用户目录下,而是在容器的用户目录下(~/.deepinwine、/tmp、桌面、下载、文档等被映射的目录除外), -同理需要运行的 EXE 也必须在被映射的目录内; -10、如果是使用 Deepin 23 的 Wine 安装脚本,请切记——安装过程会临时添加 Deepin 20 的 apt 源,不要中断安装以及 -千万不要中断后不删除源的情况下 apt upgrade !!!中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine(会自动执行恢复操作)即可 -以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示; -N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。''') -updateThingsString = transla.transe("U", '''※1、Windows 虚拟机安装工具支持非 X86 架构; -※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包; -※3、Windows 虚拟机安装工具支持调用 Qemu; -※4、新增 Qemu User 运行 Wine 的帮助入口; -※5、修复 Windows 虚拟机的自动配置镜像缺少 aria2c.exe 的故障; -※6、支持在更新程序版本时自动关闭程序进程; -7、运行器和打包器支持调用 spark-wine8; -8、修改作者信息; -9、新增安装包构建时间; -10、优化 Wine 运行器更新策略。 -''') -for i in information["Thank"]: - thankText += f"{i}\n" -updateTime = "2023年04月29日" -aboutProgram = transla.transe("U", """

Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序,内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。

-

它同时还内置了基于VirtualBox制作的、专供小白使用的Windows虚拟机安装工具,可以做到只需下载系统镜像并点击安装即可,无需考虑虚拟机的安装、创建、分区等操作。

-
-
-一个图形化了如下命令的程序(最简单格式)
-env WINEPREFIX=容器路径 wine(wine的路径) 可执行文件路径
-让你可以简易方便的使用 wine""")
-about = f'''
-

关于

-{aboutProgram} - -版本:{version} -适用平台:{goodRunSystem}(@VersionForType@) -安装包构建时间:{information['Time']} -Qt 版本:{QtCore.qVersion()} -程序官网:{programUrl} -当前程序占用体积:@programSize@MB
-

本程序依照 GPLV3 协议开源

-
-

鸣谢名单

-
{thankText}
-
-

更新内容

-
{updateThingsString}
-更新时间:{updateTime}
-
-

提示

-
{tips}
-
-
-

友谊链接

-
星火应用商店:https://spark-app.store/
-Deepin 官网:https://www.deepin.org
-Deepin 论坛:https://bbs.deepin.org
-gfdgd xi:https://gfdgd-xi.github.io
-
-

©2020~{time.strftime("%Y")} By gfdgd xi

''' -title = "Wine 运行器 {}".format(version) -#

©2020~{time.strftime("%Y")} By gfdgd xi

''' -updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) -try: - threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start() -except: - pass -iconListUnBuild = json.loads(readtxt(f"{programPath}/IconList.json"))[0] -iconList = json.loads(readtxt(f"{programPath}/IconList.json"))[1] -for i in iconListUnBuild: - iconList.append(i) -print(iconList) - -# Qemu Lock -try: - if os.path.exists("/tmp/deepin-wine-runner-lock.txt"): - print("lock") - with open(f"/tmp/deepin-wine-runner-lock.txt", "r") as file: - setting["QemuUnMountHome"] = bool(int(file.read())) - else: - print("unlock") - with open(f"/tmp/deepin-wine-runner-lock.txt", "w") as file: - # = bool(int(file.read())) - file.write(str(int(setting["QemuUnMountHome"]))) -except: - traceback.print_exc() - -########################### -# 窗口创建 -########################### -# 读取主题 -# Qt 窗口 -app = QtWidgets.QApplication(sys.argv) -window = QtWidgets.QMainWindow() -window.setWindowTitle(title) -widget = QtWidgets.QWidget() -window.setCentralWidget(widget) -mainLayout = QtWidgets.QGridLayout() -# 权重 -size = QtWidgets.QSizePolicy() -size.setHorizontalPolicy(0) -widgetSize = QtWidgets.QSizePolicy() -#size.setHorizontalPolicy(0) -widgetSize.setVerticalPolicy(0) -# -leftUp = QtWidgets.QWidget() -mainLayout.addWidget(leftUp, 0, 0, 1, 1) -leftUpLayout = QtWidgets.QGridLayout() -leftUp.setLayout(leftUpLayout) -fastLabel = QtWidgets.QLabel(transla.transe("U", "快速启动")) -fastLabel.setStyleSheet("font: 30px;") -leftUpLayout.addWidget(fastLabel, 0, 0, 1, 2) -leftUpLayout.addWidget(QtWidgets.QLabel("
"), 1, 0, 1, 2) -leftUpLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "请选择容器路径:")), 2, 0, 1, 1) -e1 = QtWidgets.QComboBox() -e1.setEditable(True) -leftUpLayout.addWidget(e1, 3, 0, 1, 1) -button1 = QtWidgets.QPushButton("浏览") -button1.clicked.connect(liulanbutton) -leftUpLayout.addWidget(button1, 3, 1, 1, 1) -leftUpLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "请选择要执行的程序(EXE、MSI或者命令):")), 4, 0, 1, 1) -e2 = QtWidgets.QComboBox() -if setting["AutoPath"]: - e2.editTextChanged.connect(ChangePath) -e2.setEditable(True) -leftUpLayout.addWidget(e2, 5, 0, 1, 1) -button2 = QtWidgets.QPushButton(transla.transe("U", "浏览")) -button2.clicked.connect(liulanexebutton) -leftUpLayout.addWidget(button2, 5, 1, 1, 1) -leftUpLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "请选择WINE版本:")), 6, 0, 1, 1) -o1 = QtWidgets.QComboBox() -leftUpLayout.addWidget(o1, 7, 0, 1, 1) -# 设置空间权重 -button1.setSizePolicy(size) -button2.setSizePolicy(size) - - -leftDown = QtWidgets.QWidget() -mainLayout.addWidget(leftDown, 1, 0, 1, 1) -leftDownLayout = QtWidgets.QVBoxLayout() -leftDown.setLayout(leftDownLayout) -highLabel = QtWidgets.QLabel(transla.transe("U", "高级功能")) -highLabel.setStyleSheet("font: 30px;") -leftDownLayout.addWidget(highLabel) -leftDownLayout.addWidget(QtWidgets.QLabel("
")) -leftDownLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "创建快捷方式(Desktop文件):"))) -createDesktopLink = QtWidgets.QHBoxLayout() -label_r_2 = QtWidgets.QLabel(transla.transe("U", "名称:")) -createDesktopLink.addWidget(label_r_2) -combobox1 = QtWidgets.QComboBox() -combobox1.setEditable(True) -createDesktopLink.addWidget(combobox1) -button5 = QtWidgets.QPushButton(transla.transe("U", "创建到桌面")) -button5.clicked.connect(make_desktop_on_desktop) -createDesktopLink.addWidget(button5) -saveDesktopFileOnLauncher = QtWidgets.QPushButton(transla.transe("U", "创建到开始菜单")) -saveDesktopFileOnLauncher.clicked.connect(make_desktop_on_launcher) -createDesktopLink.addWidget(saveDesktopFileOnLauncher) -leftDownLayout.addLayout(createDesktopLink) -programManager = QtWidgets.QGridLayout() -leftDownLayout.addLayout(programManager) -programManager.addWidget(QtWidgets.QLabel(transla.transe("U", "程序管理:")), 0, 0, 1, 1) -getProgramIcon = QtWidgets.QPushButton(transla.transe("U", "提取图标")) -getProgramIcon.clicked.connect(lambda: RunWineProgram(f"{programPath}/BeCyIconGrabber.exe' '{e2.currentText()}" if e2.currentText()[:2].upper() == "C:" else f"{programPath}/BeCyIconGrabber.exe' 'z:/{e2.currentText()}")) -programManager.addWidget(getProgramIcon, 1, 0, 1, 1) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 1, 1, 1) -trasButton = QtWidgets.QPushButton(transla.transe("U", "窗口透明工具")) -trasButton.clicked.connect(lambda: RunWineProgram(f"{programPath}/窗体透明度设置工具.exe")) -programManager.addWidget(trasButton, 1, 2, 1, 1) -uninstallProgram = QtWidgets.QPushButton(transla.transe("U", "卸载程序")) -uninstallProgram.clicked.connect(lambda: RunWineProgram(f"{programPath}/geek.exe")) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 3, 1, 1) -programManager.addWidget(uninstallProgram, 1, 4, 1, 1) -miniAppStore = QtWidgets.QPushButton(transla.transe("U", "微型应用商店")) -miniAppStore.clicked.connect(lambda: threading.Thread(target=MiniAppStore).start()) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 5, 1, 1) -programManager.addWidget(miniAppStore, 1, 6, 1, 1) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 7, 1, 1) -getProgramStatus = QtWidgets.QPushButton(transla.transe("U", "获取该程序运行情况")) -getProgramStatus.clicked.connect(ProgramRunStatusShow.ShowWindow) -programManager.addWidget(getProgramStatus, 1, 8, 1, 1) -getLoseDll = QtWidgets.QPushButton(transla.transe("U", "检测静态下程序缺少DLL")) -getLoseDll.clicked.connect(GetLoseDll) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 9, 1, 1) -programManager.addWidget(getLoseDll, 1, 10, 1, 1) -programManager.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum), 1, 11, 1, 1) -programManager.addWidget(QtWidgets.QLabel(transla.transe("U", "WINE配置:")), 2, 0, 1, 1) -wineConfig = QtWidgets.QPushButton(transla.transe("U", "配置容器")) -wineConfig.clicked.connect(lambda: RunWineProgram("winecfg")) -programManager.addWidget(wineConfig, 3, 0, 1, 1) -fontAppStore = QtWidgets.QPushButton(transla.transe("U", "字体商店")) -fontAppStore.clicked.connect(FontAppStore) -programManager.addWidget(fontAppStore, 3, 2, 1, 1) -button_r_6 = QtWidgets.QPushButton(transla.transe("U", "RegShot")) -button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe")) -programManager.addWidget(button_r_6, 3, 4, 1, 1) -sparkWineSetting = QtWidgets.QPushButton(transla.transe("U", "星火wine配置")) -sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start()) -programManager.addWidget(sparkWineSetting, 3, 6, 1, 1) -wineAutoConfig = QtWidgets.QPushButton(transla.transe("U", "自动/手动配置 Wine 容器")) -wineAutoConfig.clicked.connect(WineBottonAutoConfig) -programManager.addWidget(wineAutoConfig, 3, 8, 1, 1) -# 权重 -button5.setSizePolicy(size) -saveDesktopFileOnLauncher.setSizePolicy(size) -label_r_2.setSizePolicy(size) -getProgramIcon.setSizePolicy(size) -#trasButton.setSizePolicy(size) -button_r_6.setSizePolicy(size) -wineConfig.setSizePolicy(size) - -returnText = QtWidgets.QTextBrowser() -returnText.setStyleSheet(""" -background-color: black; -color: white; -""") -returnText.setText(transla.transe("U", "在此可以看到wine安装应用时的终端输出内容")) -mainLayout.setRowStretch(0, 2) -mainLayout.setRowStretch(1, 1) -mainLayout.setColumnStretch(0, 2) -mainLayout.setColumnStretch(1, 1) -mainLayout.addWidget(returnText, 0, 1, 2, 1) - -# 版权 -copy = QtWidgets.QLabel(f"""\n程序版本:{version},提示:Wine 无法保证可以运行所有的 Windows 程序,如果想要运行更多 Windows 程序,可以考虑虚拟机和双系统
-©2020~{time.strftime("%Y")} gfdgd xi""") -mainLayout.addWidget(copy, 2, 0, 1, 1) - -# 程序运行 -programRun = QtWidgets.QWidget() -programRunLayout = QtWidgets.QHBoxLayout() -programRun.setLayout(programRunLayout) -programRunLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) -button3 = QtWidgets.QPushButton(transla.transe("U", "运行程序")) -button3.clicked.connect(runexebutton) -programRunLayout.addWidget(button3) -killProgram = QtWidgets.QPushButton(transla.transe("U", "终止程序")) -killProgram.clicked.connect(KillProgram) -programRunLayout.addWidget(killProgram) -killBottonProgram = QtWidgets.QPushButton(transla.transe("U", "终止指定容器的程序")) -killBottonProgram.clicked.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/kill.sh' '{os.path.basename(e1.currentText())}'"]).start()) -programRunLayout.addWidget(killBottonProgram) -mainLayout.addWidget(programRun, 2, 1, 1, 1) - -# 菜单栏 -menu = window.menuBar() -programmenu = menu.addMenu(transla.transe("U", "程序(&P)")) -p1 = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 wine(&I)")) -installWineOnDeepin23 = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine23P.png"), transla.transe("U", "安装 wine(只限Deepin23 Preview)")) -installWineOnDeepin23Alpha = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine23A.png"), transla.transe("U", "安装 wine(只限Deepin23 Alpha)")) -installWineHQ = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 WineHQ")) -installMoreWine = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/more-wine.png"), transla.transe("U", "安装更多 Wine")) -downloadChrootBottle = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/CHROOT.png"), transla.transe("U", "下载 Chroot 容器")) -installBox86 = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86")) -p2 = QtWidgets.QAction(QtGui.QIcon.fromTheme("settings"), transla.transe("U", "设置程序(&S)")) -enabledAll = QtWidgets.QAction(transla.transe("U", "强制启用所有被禁用的组件(不推荐)")) -p3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件历史记录(&C)")) -cleanCache = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件缓存")) -cleanProgramUnuse = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "删除程序组件")) -p4 = QtWidgets.QAction(QtGui.QIcon.fromTheme("exit"), transla.transe("U", "退出程序(&E)")) -programmenu.addAction(p1) -programmenu.addAction(installWineOnDeepin23) -programmenu.addAction(installWineOnDeepin23Alpha) -programmenu.addAction(installWineHQ) -programmenu.addAction(installMoreWine) -programmenu.addAction(downloadChrootBottle) -programmenu.addAction(installBox86) -programmenu.addSeparator() -programmenu.addAction(p2) -programmenu.addAction(enabledAll) -programmenu.addSeparator() -programmenu.addAction(p3) -programmenu.addAction(cleanCache) -programmenu.addAction(cleanProgramUnuse) -programmenu.addSeparator() -programmenu.addAction(p4) -p1.triggered.connect(InstallWine) -installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23) -installWineOnDeepin23Alpha.triggered.connect(InstallWineOnDeepin23Alpha) -installWineHQ.triggered.connect(InstallWineHQ) -installMoreWine.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/wine/installwine'"]).start()) -downloadChrootBottle.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/QemuDownload.py'"]).start()) -p2.triggered.connect(ProgramSetting.ShowWindow) -enabledAll.triggered.connect(lambda: DisableButton(False)) -installBox86.triggered.connect(lambda: OpenTerminal(f"pkexec bash '{programPath}/InstallBox86.sh'")) -p3.triggered.connect(CleanProgramHistory) -cleanCache.triggered.connect(CleanProgramCache) -cleanProgramUnuse.triggered.connect(CleanProgram) -p4.triggered.connect(window.close) - -wineOption = menu.addMenu(transla.transe("U", "Wine(&W)")) -w1 = QtWidgets.QAction(transla.transe("U", "打开 Wine 容器目录")) -w2 = QtWidgets.QAction(QtGui.QIcon.fromTheme("font"), transla.transe("U", "安装常见字体")) -w3 = QtWidgets.QAction(QtGui.QIcon.fromTheme("font"), transla.transe("U", "安装自定义字体")) -w4 = QtWidgets.QAction(transla.transe("U", "删除选择的 Wine 容器")) -cleanBottonUOS = QtWidgets.QAction(transla.transe("U", "清理 Wine 容器(基于 Wine 适配活动脚本)")) -wineKeyboardLnk = QtWidgets.QAction(transla.transe("U", "Wine 快捷键映射")) -w5 = QtWidgets.QAction(QtGui.QIcon.fromTheme("deb"), transla.transe("U", "打包 wine 应用")) -w6 = QtWidgets.QAction(QtGui.QIcon.fromTheme("deb"), transla.transe("U", "使用官方 Wine 适配活动的脚本进行打包")) -easyPackager = QtWidgets.QAction(QtGui.QIcon.fromTheme("deb"), transla.transe("U", "使用简易打包器进行打包(小白且无特殊需求建议使用这个)")) -getDllOnInternet = QtWidgets.QAction(QtGui.QIcon.fromTheme("1CD8_rundll32.0"), transla.transe("U", "从互联网获取DLL")) -w7 = QtWidgets.QAction(transla.transe("U", "从镜像获取DLL(只支持官方安装镜像,DOS内核如 Windows 95 暂不支持)")) -updateGeek = QtWidgets.QAction(transla.transe("U", "从 Geek Uninstaller 官网升级程序")) -deletePartIcon = QtWidgets.QAction(transla.transe("U", "快捷方式管理工具")) -deleteDesktopIcon = QtWidgets.QAction(transla.transe("U", "删除所有 Wine 程序在启动器的快捷方式")) -wineOption.addAction(w1) -wineOption.addAction(w2) -wineOption.addAction(w3) -wineOption.addAction(w4) -wineOption.addAction(cleanBottonUOS) -wineOption.addSeparator() -wineOption.addAction(w5) -wineOption.addAction(w6) -wineOption.addAction(easyPackager) -wineOption.addAction(deletePartIcon) -wineOption.addSeparator() -wineOption.addAction(wineKeyboardLnk) -wineOption.addSeparator() -wineOption.addAction(getDllOnInternet) -wineOption.addAction(w7) -wineOption.addSeparator() -wineOption.addAction(updateGeek) -wineOption.addSeparator() -wm1 = wineOption.addMenu(transla.transe("U", "在指定 Wine、容器安装组件")) -wm1_1 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装 .net framework")) -wm1_2 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装 Visual Studio C++")) -wm1_3 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装 MSXML")) -wm1_4 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装 gecko")) -wm1_5 = QtWidgets.QAction(QtGui.QIcon.fromTheme("mono"), transla.transe("U", "在指定wine、指定容器安装 mono")) -wm1_7 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装 Visual Basic Runtime")) -wm1_6 = QtWidgets.QAction(transla.transe("U", "在指定wine、指定容器安装其它运行库")) -wm1.addAction(wm1_1) -wm1.addAction(wm1_2) -wm1.addAction(wm1_3) -wm1.addAction(wm1_4) -wm1.addAction(wm1_5) -wm1.addAction(wm1_7) -wm1.addAction(wm1_6) -wm2 = wineOption.addMenu(transla.transe("U", "在指定 Wine、容器运行基础应用")) -wm2_1 = QtWidgets.QAction(QtGui.QIcon.fromTheme("control-center2"), transla.transe("U", "打开指定wine、指定容器的控制面板")) -wm2_2 = QtWidgets.QAction(QtGui.QIcon.fromTheme("web-browser"), transla.transe("U", "打开指定wine、指定容器的浏览器")) -wm2_3 = QtWidgets.QAction(QtGui.QIcon.fromTheme("regedit"), transla.transe("U", "打开指定wine、指定容器的注册表")) -wm2_4 = QtWidgets.QAction(transla.transe("U", "打开指定wine、指定容器的任务管理器")) -wm2_5 = QtWidgets.QAction(transla.transe("U", "打开指定wine、指定容器的资源管理器")) -wm2_6 = QtWidgets.QAction(transla.transe("U", "打开指定wine、指定容器的关于 wine")) -wm2.addAction(wm2_1) -wm2.addAction(wm2_2) -wm2.addAction(wm2_3) -wm2.addAction(wm2_4) -wm2.addAction(wm2_5) -wm2.addAction(wm2_6) -wineOption.addSeparator() -settingRunV3Sh = wineOption.addMenu(transla.transe("U", "run_v3.sh 管理")) -w8 = QtWidgets.QAction(transla.transe("U", "设置 run_v3.sh 的文管为 Deepin 默认文管")) -w9 = QtWidgets.QAction(transla.transe("U", "设置 run_v3.sh 的文管为 Wine 默认文管")) -w10 = QtWidgets.QAction(transla.transe("U", "重新安装 deepin-wine-helper")) -w11 = QtWidgets.QAction(QtGui.QIcon.fromTheme("winetricks"), transla.transe("U", "使用winetricks打开指定容器")) -settingRunV3Sh.addAction(w8) -settingRunV3Sh.addAction(w9) -settingRunV3Sh.addAction(w10) -wineOption.addSeparator() -wineOption.addAction(w11) -wineOption.addSeparator() -optionCheckDemo = wineOption.addMenu(transla.transe("U", "组件功能测试")) -vbDemo = QtWidgets.QAction(transla.transe("U", "测试 Visual Basic 6 程序")) -netDemo = QtWidgets.QAction(transla.transe("U", "测试 .net framework 程序")) -netIEDemo = QtWidgets.QAction(transla.transe("U", "测试 .net framework + Internet Explorer 程序")) -optionCheckDemo.addAction(vbDemo) -optionCheckDemo.addAction(netDemo) -optionCheckDemo.addAction(netIEDemo) -wineOption.addSeparator() -wm3 = wineOption.addMenu(transla.transe("U", "启用/禁用功能")) -ed1 = wm3.addMenu(transla.transe("U", "启用/禁用 opengl")) -wm3_1 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "开启 opengl")) -wm3_2 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "禁用 opengl")) -ed1.addAction(wm3_1) -ed1.addAction(wm3_2) -ed2 = wm3.addMenu(transla.transe("U", "安装/卸载 winbind")) -wm4_1 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "安装 winbind")) -wm4_2 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "卸载 winbind")) -ed2.addAction(wm4_1) -ed2.addAction(wm4_2) -dxvkMenu = wm3.addMenu(transla.transe("U", "安装/卸载 DXVK")) -installDxvk = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "安装 DXVK")) -uninstallDxvk = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "卸载 DXVK")) -dxvkMenu.addAction(installDxvk) -dxvkMenu.addAction(uninstallDxvk) -vkd3dMenu = wm3.addMenu(transla.transe("U", "安装/卸载 Vkd3d")) -installvkd3d = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "安装 Vkd3d")) -uninstallvkd3d = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "卸载 Vkd3d")) -vkd3dMenu.addAction(installvkd3d) -vkd3dMenu.addAction(uninstallvkd3d) -wineOption.addSeparator() -wineOption.addAction(deleteDesktopIcon) -wineOption.addSeparator() -settingWineBottleCreateLink = wm3.addMenu(transla.transe("U", "启用/禁止指定 wine 容器生成快捷方式")) -enabledWineBottleCreateLink = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "允许指定 wine 容器生成快捷方式")) -disbledWineBottleCreateLink = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "禁止指定 wine 容器生成快捷方式")) -settingWineBottleCreateLink.addAction(enabledWineBottleCreateLink) -settingWineBottleCreateLink.addAction(disbledWineBottleCreateLink) -settingWineCrashDialog = wm3.addMenu(transla.transe("U", "启用/禁用指定 wine 容器崩溃提示窗口")) -disbledWineCrashDialog = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "禁用指定 wine 容器崩溃提示窗口")) -enabledWineCrashDialog = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "启用指定 wine 容器崩溃提示窗口")) -settingWineCrashDialog.addAction(enabledWineCrashDialog) -settingWineCrashDialog.addAction(disbledWineCrashDialog) -settingOpenProgram = wm3.addMenu(transla.transe("U", "启用/禁止指定 wine 容器创建文件关联")) -enabledOpenProgram = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(45), transla.transe("U", "允许指定 wine 容器创建文件关联")) -disbledOpenProgram = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "禁止指定 wine 容器创建文件关联")) -settingOpenProgram.addAction(enabledOpenProgram) -settingOpenProgram.addAction(disbledOpenProgram) -settingHttpProxy = wineOption.addMenu(transla.transe("U", "设置指定 Wine 容器代理")) -enabledHttpProxy = QtWidgets.QAction(transla.transe("U", "设置指定 wine 容器的代理")) -disbledHttpProxy = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(40), transla.transe("U", "禁用指定 wine 容器的代理")) -settingHttpProxy.addAction(enabledHttpProxy) -settingHttpProxy.addAction(disbledHttpProxy) -dllOver = wineOption.addMenu(transla.transe("U", "函数顶替库列表")) -saveDllOver = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(43), transla.transe("U", "导出函数顶替列表")) -addDllOver = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "导入函数顶替列表")) -editDllOver = QtWidgets.QAction(transla.transe("U", "编辑函数顶替库列表")) -dllOver.addAction(saveDllOver) -dllOver.addAction(addDllOver) -dllOver.addAction(editDllOver) -w1.triggered.connect(OpenWineBotton) -w2.triggered.connect(InstallWineFont) -w3.triggered.connect(OpenWineFontPath) -w4.triggered.connect(DeleteWineBotton) -cleanBottonUOS.triggered.connect(CleanWineBottonByUOS) -w5.triggered.connect(BuildExeDeb) -w6.triggered.connect(UOSPackageScript) -easyPackager.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-easy-packager.py' '{e2.currentText()}'"]).start()) -wineKeyboardLnk.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/key/key-add-gui.py'"]).start()) -getDllOnInternet.triggered.connect(GetDllFromInternet) -w7.triggered.connect(GetDllFromWindowsISO.ShowWindow) -updateGeek.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C '\"{programPath}/UpdateGeek.sh\"' --keep-open")) -w8.triggered.connect(SetDeepinFileDialogDeepin) -w9.triggered.connect(SetDeepinFileDialogDefult) -w10.triggered.connect(SetDeepinFileDialogRecovery) -w11.triggered.connect(lambda: RunWinetricks()) -wm1_1.triggered.connect(lambda: threading.Thread(target=InstallNetFramework).start()) -wm1_2.triggered.connect(lambda: threading.Thread(target=InstallVisualStudioCPlusPlus).start()) -wm1_3.triggered.connect(lambda: threading.Thread(target=InstallMSXML).start()) -wm1_4.triggered.connect(lambda: threading.Thread(target=InstallMonoGecko, args=["gecko"]).start()) -wm1_5.triggered.connect(lambda: threading.Thread(target=InstallMonoGecko, args=["mono"]).start()) -wm1_7.triggered.connect(lambda: threading.Thread(target=InstallVB).start()) -wm1_6.triggered.connect(lambda: threading.Thread(target=InstallOther).start()) -wm2_1.triggered.connect(lambda: RunWineProgram("control")) -wm2_2.triggered.connect(lambda: RunWineProgram("iexplore' 'https://gfdgd-xi.github.io")) -wm2_3.triggered.connect(lambda: RunWineProgram("regedit")) -wm2_4.triggered.connect(lambda: RunWineProgram("taskmgr")) -wm2_5.triggered.connect(lambda: RunWineProgram("explorer")) -wm2_6.triggered.connect(lambda: RunWineProgram("winver")) -wm3_1.triggered.connect(lambda: RunWineProgram(f"regedit.exe' /s '{programPath}/EnabledOpengl.reg")) -wm3_2.triggered.connect(lambda: RunWineProgram(f"regedit.exe' /s '{programPath}/DisabledOpengl.reg")) -wm4_1.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt install winbind -y' --keep-open")) -wm4_2.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt purge winbind -y' --keep-open")) -installDxvk.triggered.connect(InstallDXVK) -uninstallDxvk.triggered.connect(UninstallDXVK) -installvkd3d.triggered.connect(InstallVkd3d) -uninstallvkd3d.triggered.connect(UninstallVkd3d) -deletePartIcon.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"python3 '{programPath}/BuildDesktop.py'"]).start()) -deleteDesktopIcon.triggered.connect(DeleteDesktopIcon) -enabledWineBottleCreateLink.triggered.connect(lambda: RunWineProgram("reg' delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v winemenubuilder.exe '/f")) -disbledWineBottleCreateLink.triggered.connect(lambda: RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v winemenubuilder.exe '/f")) -disbledWineCrashDialog.triggered.connect(lambda: RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Wine\WineDbg' /v ShowCrashDialog /t REG_DWORD /d 00000000 '/f")) -enabledWineCrashDialog.triggered.connect(lambda: RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Wine\WineDbg' /v ShowCrashDialog /t REG_DWORD /d 00000001 '/f")) -disbledOpenProgram.triggered.connect(lambda: RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations' /v Enable /d N '/f")) -enabledOpenProgram.triggered.connect(lambda: RunWineProgram("reg' add 'HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations' /v Enable /d Y '/f")) -enabledHttpProxy.triggered.connect(SetHttpProxy) -disbledHttpProxy.triggered.connect(DisbledHttpProxy) -saveDllOver.triggered.connect(SaveDllList) -addDllOver.triggered.connect(AddReg) -editDllOver.triggered.connect(lambda: RunWineProgram("winecfg")) -vbDemo.triggered.connect(lambda: RunWineProgram(f"{programPath}/Test/vb.exe")) -netDemo.triggered.connect(lambda: RunWineProgram(f"{programPath}/Test/net.exe")) -netIEDemo.triggered.connect(lambda: RunWineProgram(f"{programPath}/Test/netandie.exe")) - -virtualMachine = menu.addMenu(transla.transe("U", "虚拟机(&V)")) -v1 = QtWidgets.QAction(QtGui.QIcon.fromTheme("virtualbox"), transla.transe("U", "使用 Virtualbox 虚拟机运行 Windows 应用")) -virtualMachine.addAction(v1) -v1.triggered.connect(RunVM) - -checkValue = menu.addMenu(transla.transe("U", "校验值计算(&S)")) -md5Value = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "MD5(&M)")) -sha1Value = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "SHA1(&M)")) -base64Value = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "Base64(建议小文件)(&B)")) -sha256Value = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "SHA256(&S)")) -sha512Value = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "SHA512(&S)")) -md5Value.triggered.connect(lambda: ValueCheck().Get("MD5")) -sha1Value.triggered.connect(lambda: ValueCheck().Get("SHA1")) -base64Value.triggered.connect(lambda: ValueCheck().Get("BASE64")) -sha256Value.triggered.connect(lambda: ValueCheck().Get("SHA256")) -sha512Value.triggered.connect(lambda: ValueCheck().Get("SHA512")) -checkValue.addAction(md5Value) -checkValue.addAction(sha1Value) -checkValue.addAction(base64Value) -checkValue.addAction(sha256Value) -checkValue.addAction(sha512Value) - - -safeWebsize = menu.addMenu(transla.transe("U", "云沙箱(&C)")) -s1 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "360 沙箱云")) -s2 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "微步云沙箱")) -s3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "VIRUSTOTAL")) -safeWebsize.addAction(s1) -safeWebsize.addAction(s2) -safeWebsize.addAction(s3) -s1.triggered.connect(lambda: webbrowser.open_new_tab("https://ata.360.net/")) -s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/")) -s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) - -log = menu.addMenu(transla.transe("U", "日志(&L)")) -getDllInfo = QtWidgets.QAction(transla.transe("U", "查询 Dll")) -checkLogText = QtWidgets.QAction(transla.transe("U", "日志分析")) -saveLogText = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(16), transla.transe("U", "另存为日志")) -transLogText = QtWidgets.QAction(transla.transe("U", "翻译日志(翻译后日志分析功能会故障)")) -uploadLogText = QtWidgets.QAction(transla.transe("U", "上传日志")) -getDllInfo.triggered.connect(DllWindow.ShowWindow) -checkLogText.triggered.connect(LogChecking.ShowWindow) -saveLogText.triggered.connect(SaveLog) -transLogText.triggered.connect(TransLog) -uploadLogText.triggered.connect(UploadLog) -log.addAction(getDllInfo) -log.addAction(checkLogText) -log.addAction(saveLogText) -log.addAction(transLogText) -log.addAction(uploadLogText) - -actionList = [] -def AddLib(install: QtWidgets.QAction, uninstall, menu, info): - actionList.append(install) - actionList.append(uninstall) - install.triggered.connect(lambda: OpenTerminal(f"bash '{programPath}/InstallRuntime/{info}'")) - uninstall.triggered.connect(lambda: OpenTerminal(f"bash '{programPath}/InstallRuntime/remove/{info}'")) - menu.addAction(install) - menu.addAction(uninstall) - -if os.path.exists(f"{programPath}/InstallRuntime"): - installLib = menu.addMenu(transla.transe("U", "应用运行库(&R)")) - howtouseQemuUser = QtWidgets.QAction(transla.transe("U", "Qemu User 使用教程(配合运行库实现在非 X86 架构运行 X86 Wine)")) - howtouseQemuUser.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner/wikis/%E4%BD%BF%E7%94%A8%E5%B8%AE%E5%8A%A9/%E9%9D%9EX86%E6%9E%B6%E6%9E%84PC/%E4%BD%BF%E7%94%A8Qemu%20User%E8%BF%90%E8%A1%8CWine%EF%BC%88%E6%94%AF%E6%8C%81%E5%85%A8%E6%9E%B6%E6%9E%84%EF%BC%89")) - installLib.addAction(howtouseQemuUser) - installQemuMenu = installLib.addMenu(transla.transe("U", "安装 Qemu User")) - installQemu = QtWidgets.QAction(transla.transe("U", "安装 Qemu User")) - removeQemu = QtWidgets.QAction(transla.transe("U", "卸载 Qemu User")) - installQemuMenu.addAction(installQemu) - installQemuMenu.addAction(removeQemu) - installQemu.triggered.connect(lambda: OpenTerminal(f"bash '{programPath}/InstallQemuUser.sh'")) - removeQemu.triggered.connect(lambda: OpenTerminal(f"bash '{programPath}/RemoveQemuUser.sh'")) - actionList = [] - nameList = {} - for i in os.listdir(f"{programPath}/InstallRuntime"): - if i[-3:] == ".sh": - print(f"检测到库 {os.path.splitext(i)[0]}") - - AddLib(QtWidgets.QAction(transla.transe("U", f"安装 {os.path.splitext(i)[0]} 运行库")), QtWidgets.QAction(transla.transe("U", f"卸载 {os.path.splitext(i)[0]} 运行库")), installLib.addMenu(transla.transe("U", f"运行库 {os.path.splitext(i)[0]}")), i) - - - -qemuMenu = menu.addMenu(transla.transe("U", "容器(&C)")) -unpackDeb = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(32), transla.transe("U", "解包 deb 提取容器")) -qemuMenu.addAction(unpackDeb) -unpackDeb.triggered.connect(UnPackage) -if len(qemuBottleList) >= 1: - configMenu = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/CHROOT.png"), transla.transe("U", "配置指定 Chroot 容器")) - qemuMenu.addAction(configMenu) - configMenu.triggered.connect(ConfigQemu) - print(qemuBottleList) - -help = menu.addMenu(transla.transe("U", "帮助(&H)")) -runStatusWebSize = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "查询程序在 Wine 的运行情况")) -h1 = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序官网")) -h2 = QtWidgets.QAction(transla.transe("U", "小提示")) -wineRunnerHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "Wine运行器和Wine打包器傻瓜式使用教程(小白专用) By 鹤舞白沙")) -h3 = QtWidgets.QAction(transla.transe("U", "更新内容")) -h4 = QtWidgets.QAction(transla.transe("U", "鸣谢名单")) -h5 = QtWidgets.QAction(transla.transe("U", "更新这个程序")) -programInformation = QtWidgets.QAction(transla.transe("U", "获取程序公告(也可以在这里看程序安装/打开量)")) -h6 = QtWidgets.QAction(transla.transe("U", "反馈这个程序的建议和问题")) -fenUpload = QtWidgets.QAction(transla.transe("U", "程序评分")) -h7 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "关于这个程序")) -h8 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "关于 Qt")) -gfdgdxiio = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "作者个人站")) -gitee = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "Gitee")) -github = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "Github")) -gitlink = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "Gitlink")) -gitlab = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "Gitlab")) -jihu = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "极狐")) -h1.addAction(gfdgdxiio) -h1.addAction(gitee) -h1.addAction(github) -h1.addAction(gitlink) -h1.addAction(gitlab) -h1.addAction(jihu) -help.addSeparator() -help.addAction(wineRunnerHelp) -help.addAction(runStatusWebSize) -help.addSeparator() -help.addAction(h2) -help.addAction(h3) -help.addAction(h4) -help.addSeparator() - -wikiHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序 Wiki")) -help.addAction(wikiHelp) -videoHelp = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "视频教程")) -easyHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "简易使用教程")) -buildHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "打包教程")) -videoHelp.addAction(easyHelp) -videoHelp.addAction(buildHelp) -help.addSeparator() -help.addAction(h5) -help.addAction(h6) -help.addAction(fenUpload) -help.addAction(programInformation) -help.addAction(h7) -help.addAction(h8) -help.addSeparator() -hm1 = help.addMenu(transla.transe("U", "更多生态适配应用")) -hm1_1 = QtWidgets.QAction(transla.transe("U", "运行 Android 应用:UEngine 运行器")) -hm1.addAction(hm1_1) -gfdgdxiio.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io")) -gitee.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner")) -github.triggered.connect(lambda: webbrowser.open_new_tab("https://github.com/gfdgd-xi/deep-wine-runner")) -gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner")) -gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner")) -jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner")) -runStatusWebSize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-info")) -h2.triggered.connect(helps) -h3.triggered.connect(UpdateThings) -wineRunnerHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://bbs.deepin.org/post/246837")) -h4.triggered.connect(ThankWindow) -wikiHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-wiki")) -easyHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1ma411972Y")) -buildHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1EU4y1k7zr")) -h5.triggered.connect(UpdateWindow.ShowWindow) -h6.triggered.connect(WineRunnerBugUpload) -fenUpload.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"python3 '{programPath}/ProgramFen.py'"]).start()) -h7.triggered.connect(about_this_program) -h8.triggered.connect(lambda: QtWidgets.QMessageBox.aboutQt(widget)) -hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/uengine-runner")) -programInformation.triggered.connect(GetNewInformation) -# 异同步获取信息 -#threading.Thread(target=GetVersion).start() -GetVersion() -# 窗口设置 -window.resize(widget.frameGeometry().width() * 2, widget.frameGeometry().height()) -widget.setLayout(mainLayout) -window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg")) -widget.show() -window.show() - -# 控件设置 -app.setStyle(QtWidgets.QStyleFactory.create(setting["Theme"])) -e1.addItems(findExeHistory) -e2.addItems(wineBottonHistory) -combobox1.addItems(shellHistory) -if setting["AutoWine"]: - o1.addItems(canUseWine) -else: - o1.addItems(wine.keys()) -# 禁用被精简掉的控件 -for i in [ - [[p1, installWineOnDeepin23, installWineHQ, installMoreWine], f"{programPath}/InstallWineOnDeepin23.py"], - [[w5], f"{programPath}/deepin-wine-packager.py"], - [[w6], f"{programPath}/deepin-wine-packager-with-script.py"], - [[p1, v1], f"{programPath}/RunVM.sh"], - [[getProgramIcon, uninstallProgram, updateGeek, trasButton, miniAppStore, fontAppStore, wm1_1, wm1_2, wm1_3, wm1_6, w7, w2], f"{programPath}/geek.exe"], -]: - if not os.path.exists(i[1]): - for x in i[0]: - x.setDisabled(True) -# 有些功能是非 X86 不适用的,需要屏蔽 -if subprocess.getoutput("arch").lower() != "x86_64": - p1.setDisabled(True) - installWineOnDeepin23.setDisabled(True) - installMoreWine.setEnabled(True) - virtualMachine.setDisabled(True) - v1.setDisabled(True) - installWineHQ.setDisabled(True) - pass -o1.setCurrentText(setting["DefultWine"]) -e1.setEditText(setting["DefultBotton"]) -e2.setEditText("") -combobox1.setEditText("") -if len(sys.argv) > 1 and sys.argv[1]: - e2.setEditText(sys.argv[1]) -if not os.path.exists("/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"): - sparkWineSetting.setEnabled(False) -if o1.currentText() == "": - # 一个 Wine 都没有却用 Wine 的功能 - # 还是要处理的,至少不会闪退 - wine["没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用"] = "没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用" - canUseWine.append("没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用") - o1.addItem("没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用") - - -sys.exit(app.exec_()) diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner-update-bug b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner-update-bug deleted file mode 100755 index 1f36530..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner-update-bug +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import json -import base64 -import req as requests -import traceback -import webbrowser -import urllib.parse as parse -import PyQt5.QtGui as QtGui -import PyQt5.QtWidgets as QtWidgets - -# 读取文本文档 -def readtxt(path: "路径")->"读取文本文档": - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - -def Update(name, stars, contact, things, version): - # post 内容 - data = { - "Name": name, - "Starts": stars, - "Contact": contact, - "Things": things, - "Version": version - } - try: - QtWidgets.QMessageBox.information(widget, "提示", requests.post(parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9idWcvdXBsb2FkLnBocA==").decode("utf-8")), data=data).text) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(widget, "错误", f"服务器疑似出现错误,可以进行以下尝试:①多尝试几次;②使用其他反馈途径\n错误信息:{traceback.format_exc()}") - -def UpdateButtonClick(): - #判断是否为空 - if nameThings.text() == "" or starMenu.currentText() == "" or contactThings.text() == "" or updateThings.toPlainText().replace(" ", "").replace("\n", "") == "": - QtWidgets.QMessageBox.critical(widget, "错误", "反馈信息未填写完整!") - return - Update(name=nameThings.text(), stars=starMenu.currentText(), contact=contactThings.text(), things=updateThings.toPlainText(), version=version) - -def OpenGiteeIssues(): - webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner/issues") - -def OpenGithubIssues(): - webbrowser.open_new_tab("https://github.com/gfdgd-xi/deep-wine-runner/issues") - -def OpenGitlinkIssues(): - webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner/issues") - -# 获取用户主目录 -def get_home()->"获取用户主目录": - return os.path.expanduser('~') - -########################### -# 程序信息 -########################### -iconPath = "{}/deepin-wine-runner.svg".format(os.path.split(os.path.realpath(__file__))[0]) -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -information = json.loads(readtxt(programPath + "/information.json")) -version = information["Version"] - -########################### -# 窗口创建 -########################### -app = QtWidgets.QApplication(sys.argv) -window = QtWidgets.QMainWindow() -widget = QtWidgets.QWidget() -widgetLayout = QtWidgets.QGridLayout() -nameThings = QtWidgets.QLineEdit() -contactThings = QtWidgets.QLineEdit() -starMenu = QtWidgets.QComboBox() -updateThings = QtWidgets.QTextEdit() -updateButton = QtWidgets.QPushButton("提交") -otherUpload = QtWidgets.QHBoxLayout() -giteeButton = QtWidgets.QPushButton("Gitee Issues") -githubButton = QtWidgets.QPushButton("Github Issues") -gitlinkButton = QtWidgets.QPushButton("Gitlink Issues") -otherUpload.addWidget(QtWidgets.QLabel("如果无法正常反馈,可以用其他方式反馈:")) -otherUpload.addWidget(giteeButton) -otherUpload.addWidget(githubButton) -otherUpload.addWidget(gitlinkButton) -otherUpload.addSpacerItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) -starMenu.addItems(["5分", "4分", "3分", "2分", "1分"]) -widgetLayout.addWidget(QtWidgets.QLabel("你的昵称:"), 0, 0, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel("联系方式(电子邮箱):"), 0, 2, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel("评分:"), 0, 4, 1, 1) -widgetLayout.addWidget(QtWidgets.QLabel("反馈内容(支持 Markdown 格式):"), 1, 0, 1, 2) -widgetLayout.addWidget(nameThings, 0, 1, 1, 1) -widgetLayout.addWidget(contactThings, 0, 3, 1, 1) -widgetLayout.addWidget(starMenu, 0, 5, 1, 1) -widgetLayout.addWidget(updateThings, 2, 0, 1, 6) -widgetLayout.addLayout(otherUpload, 3, 0, 1, 5) -widgetLayout.addWidget(updateButton, 3, 5, 1, 1) -giteeButton.clicked.connect(OpenGiteeIssues) -githubButton.clicked.connect(OpenGithubIssues) -gitlinkButton.clicked.connect(OpenGitlinkIssues) -updateButton.clicked.connect(UpdateButtonClick) -widget.setLayout(widgetLayout) -window.setCentralWidget(widget) -window.setWindowTitle(f"Wine 运行器 {version} 问题/建议反馈") -window.setWindowIcon(QtGui.QIcon(iconPath)) -window.show() -sys.exit(app.exec_()) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner.svg b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner.svg deleted file mode 100755 index c404135..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-venturi-setter.py b/deb/opt/apps/deepin-wine-runner/deepin-wine-venturi-setter.py deleted file mode 100755 index f66bd7c..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-venturi-setter.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python3 -# 使用系统默认的 python3 运行 -########################################################################################### -# 作者:gfdgd xi -# 版本:1.5.3 -# 更新时间:2022年07月07日 -# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 tkinter 构建 -########################################################################################### -################# -# 引入所需的库 -################# -import os -import sys -import updatekiller - -################### -# 程序所需事件 -################### -# 读取文本文档 -def readtxt(path: "路径")->"读取文本文档": - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - - -def ChangeDeepinWineOpenFileDialogDefult()->"": - info = readtxt("/opt/deepinwine/tools/run_v3.sh") - all = "" - for line in info.split('\n'): - if "export ATTACH_FILE_DIALOG=" in line: - if "#" in line: - return False - line = "#" + line - all = all + line + "\n" - return all[0: -1] - -def ChangeDeepinWineOpenFileDialogDeepinDialog()->"": - info = readtxt("/opt/deepinwine/tools/run_v3.sh") - all = "" - for line in info.split('\n'): - if "export ATTACH_FILE_DIALOG=" in line: - if "#" not in line: - return False - line = line.replace("#", "") - all = all + line + "\n" - return all[0: -1] - -# 写入文本文档 -def write_txt(path: "路径", things: "内容")->"写入文本文档": - file = open(path, 'w', encoding='UTF-8') # 设置文件对象 - file.write(things) # 写入文本 - file.close() # 关闭文本对象 - -def Help(): - print("参数帮助:") - print("deepin\t使用 deepin 默认文管") - print("defult\t使用 wine 默认文管") - print("recovery\t恢复默认设置") - print("--help\t查看帮助") - -if len(sys.argv) <= 1: - print("参数错误!") - Help() - sys.exit(1) -if not sys.argv[1] == "deepin" and not sys.argv[1] == "defult" and not sys.argv[1] == "recovery" or sys.argv[1] == "--help": - Help() - sys.exit(1) -things = "" -if sys.argv[1] == "deepin": - things = ChangeDeepinWineOpenFileDialogDeepinDialog() -elif sys.argv[1] == "defult": - things = ChangeDeepinWineOpenFileDialogDefult() -elif sys.argv[1] == "recovery": - os.system("sudo apt reinstall deepin-wine-helper -y") - sys.exit(0) -else: - print("参数错误!") - Help() - sys.exit(1) -if things == False or things == "": - print("无法更新配置:配置不准重复更新") - sys.exit(1) -write_txt("/opt/deepinwine/tools/run_v3.sh", things) -sys.exit(0) diff --git a/deb/opt/apps/deepin-wine-runner/deepin.list b/deb/opt/apps/deepin-wine-runner/deepin.list deleted file mode 100755 index 624cada..0000000 --- a/deb/opt/apps/deepin-wine-runner/deepin.list +++ /dev/null @@ -1,4 +0,0 @@ -## Generated by deepin-installer -deb https://community-packages.deepin.com/deepin/ apricot main contrib non-free -# Written by deepin-home-appstore-client -deb https://com-store-packages.uniontech.com/appstore deepin appstore diff --git a/deb/opt/apps/deepin-wine-runner/dlls-arm.7z b/deb/opt/apps/deepin-wine-runner/dlls-arm.7z deleted file mode 100755 index 776fd35..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/dlls-arm.7z and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/dxvk.7z b/deb/opt/apps/deepin-wine-runner/dxvk.7z deleted file mode 100755 index 5c4a714..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/dxvk.7z and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-package-builder.desktop b/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-package-builder.desktop deleted file mode 100755 index cb4fe1a..0000000 --- a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-package-builder.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System;Wine; -Exec=/usr/bin/deepin-wine-package-builder "~/.wine" %F -Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg -Name=Wine Package Builder -Name[zh]=Wine 打包器 -Terminal=false -StartupNotify=true -NoDisplay=true -Keywords=exe;scr; -MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut; diff --git a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-packager-with-script.desktop b/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-packager-with-script.desktop deleted file mode 100755 index e67f51c..0000000 --- a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-packager-with-script.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System;Wine; -Exec=/usr/bin/deepin-wine-packager-with-script -Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg -Name=Wine Package Builder For UOS -NoDisplay=true -Name[zh]=Wine 打包器(基于活动脚本) -Terminal=false -StartupNotify=true diff --git a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-control-vm.desktop b/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-control-vm.desktop deleted file mode 100755 index 35eacdc..0000000 --- a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-control-vm.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System;Wine; -Exec=/opt/apps/deepin-wine-runner/RunVM.sh %F -Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg -Name=Setting VirtualMachine -Name[zh]=设置 Windows 虚拟机 -NoDisplay=true -Terminal=false -StartupNotify=true diff --git a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-start-vm.desktop b/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-start-vm.desktop deleted file mode 100755 index 1271f09..0000000 --- a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner-start-vm.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System; -Exec=/opt/apps/deepin-wine-runner/StartVM.sh %F -Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg -Name=Start Windows VirtualMachine -Name[zh]=开启 Windows 虚拟机 -Terminal=false -StartupNotify=true diff --git a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner.desktop b/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner.desktop deleted file mode 100755 index af220ee..0000000 --- a/deb/opt/apps/deepin-wine-runner/entries/applications/spark-deepin-wine-runner.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System;Wine; -Exec=/usr/bin/deepin-wine-runner %F -Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg -Name=Wine Runner -Name[zh]=Wine 运行器 -Terminal=false -StartupNotify=true -Keywords=exe;scr; -MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut; diff --git a/deb/opt/apps/deepin-wine-runner/geek.exe b/deb/opt/apps/deepin-wine-runner/geek.exe deleted file mode 100755 index 72e206b..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/geek.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/getxmlimg.py b/deb/opt/apps/deepin-wine-runner/getxmlimg.py deleted file mode 100755 index af59a70..0000000 --- a/deb/opt/apps/deepin-wine-runner/getxmlimg.py +++ /dev/null @@ -1,118 +0,0 @@ -import PIL.Image as Image -import PIL.ImageDraw as ImageDraw -import zipfile -import subprocess -import re - -class getsavexml(): - - def savexml(self,apkFilePath,xmlpath,iconSavePath): - cmddumpid = "aapt dump xmltree "+ apkFilePath + " " + xmlpath - print(cmddumpid) - xmltree = subprocess.getoutput(cmddumpid) - xmls = xmltree.splitlines() - # find strs ,print next line - def FindStrs(lines,strs): - i=0 - while i < len(lines): - if re.search(strs,lines[i]): - tmpstr = lines[i+1] - i += 1 - Resultstr = tmpstr.split(":")[-1].split("=")[-1].split("0x")[-1] - return Resultstr - else: - i += 1 - #从apk的信息中获取前后景图片的ID号 - backimgid = FindStrs(xmls,"background") - foreimgid = FindStrs(xmls,"foreground") - print(backimgid) - print(foreimgid) - - # 直接从apk resource文件获取前后两层图片路径及ID字符串 - resource = subprocess.getoutput("aapt dump --values resources " + apkFilePath + "| grep -iE -A1 " + "\"" + backimgid + "|" + foreimgid + "\"") - resourcelines = resource.splitlines() - print(resourcelines) - - # 从过滤出的字符串中获取所有相同ID的图片路径 - def Findpicpath(lines,imgid): - i=0 - Resultstr = [] - while i < len(lines): - if re.search(imgid,lines[i]) and re.search("string8",lines[i+1]) : - print(lines[i+1]) - tmpstr = lines[i+1].replace("\"","") - i += 1 - Resultstr.append(tmpstr.split()[-1]) - else: - i += 1 - return Resultstr - - #获取所有带前后图片ID的图片路径(相同背景或者前景的图片ID但分辨率不一样) - backimgs = Findpicpath(resourcelines,backimgid) - foreimgs = Findpicpath(resourcelines,foreimgid) - print(backimgs) - print(foreimgs) - #获取分辨率最高的图片路径 - def getmaxsize(imgs): - j = 0 - size=(0,0) - zipapk = zipfile.ZipFile(apkFilePath) - imgpath = "" - while j < len(imgs): - print(imgs[j]) - img = Image.open(zipapk.open(imgs[j])) - print(imgs[j]) - print(img.size) - if size < img.size: - size = img.size - imgpath = imgs[j] - j += 1 - return imgpath - - # 获取到文件列表后,进行比较分辨率,选取分辨率最高的张图片 - iconbackpath = getmaxsize(backimgs) - iconforepath = getmaxsize(foreimgs) - print(iconbackpath + " " + iconforepath) - - #从APK文件获取最终图片 - zipapk = zipfile.ZipFile(apkFilePath) - iconback = zipapk.open(iconbackpath) - iconfore = zipapk.open(iconforepath) - - - # 叠加图片,mask 设置前景为蒙版 - iconbackimg = Image.open(iconback).convert("RGBA") - iconforeimg = Image.open(iconfore).convert("RGBA") - iconbackimg.paste(iconforeimg,mask=iconforeimg) - - - # 圆角图片函数,网上拷贝的 - def circle_corner(img, radii): #把原图片变成圆角,这个函数是从网上找的,原址 https://www.pyget.cn/p/185266 - """ - 圆角处理 - :param img: 源图象。 - :param radii: 半径,如:30。 - :return: 返回一个圆角处理后的图象。 - """ - # 画圆(用于分离4个角) - circle = Image.new('L', (radii * 2, radii * 2), 0) # 创建一个黑色背景的画布 - draw = ImageDraw.Draw(circle) - draw.ellipse((0, 0, radii * 2, radii * 2), fill=255) # 画白色圆形 - # 原图 - img = img.convert("RGBA") - w, h = img.size - # 画4个角(将整圆分离为4个部分) - alpha = Image.new('L', img.size, 255) - alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0)) # 左上角 - alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0)) # 右上角 - alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii)) # 右下角 - alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii)) # 左下角 - # alpha.show() - img.putalpha(alpha) # 白色区域透明可见,黑色区域不可见 - return img - - # 圆角半径1/8边长,保存icon图片 - w,h = iconbackimg.size - iconimg = circle_corner(iconbackimg,int(w/8)) - iconimg.save(iconSavePath) - diff --git a/deb/opt/apps/deepin-wine-runner/gtkGetFileNameDlg b/deb/opt/apps/deepin-wine-runner/gtkGetFileNameDlg deleted file mode 100755 index 2969141..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/gtkGetFileNameDlg and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter b/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter deleted file mode 100755 index 61865ed..0000000 --- a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys - -# 读取文本文档 -def readtxt(path: "路径")->"读取文本文档": - f = open(path, "r") # 设置文件对象 - str = f.read() # 获取内容 - f.close() # 关闭文本对象 - return str # 返回结果 - - -def ChangeDeepinWineOpenFileDialogDefult()->"": - info = readtxt("/opt/deepinwine/tools/run_v3.sh") - all = "" - for line in info.split('\n'): - if "export ATTACH_FILE_DIALOG=" in line: - if "#" in line: - return False - line = "#" + line - all = all + line + "\n" - return all[0: -1] - -def ChangeDeepinWineOpenFileDialogDeepinDialog()->"": - info = readtxt("/opt/deepinwine/tools/run_v3.sh") - all = "" - for line in info.split('\n'): - if "export ATTACH_FILE_DIALOG=" in line: - if "#" not in line: - return False - line = line.replace("#", "") - all = all + line + "\n" - return all[0: -1] - -# 写入文本文档 -def write_txt(path: "路径", things: "内容")->"写入文本文档": - file = open(path, 'w', encoding='UTF-8') # 设置文件对象 - file.write(things) # 写入文本 - file.close() # 关闭文本对象 - -def Help(): - print("参数帮助:") - print("deepin\t使用 deepin 默认文管") - print("defult\t使用 wine 默认文管") - print("recovery\t恢复默认设置") - print("--help\t查看帮助") - -if len(sys.argv) <= 1: - print("参数错误!") - Help() - sys.exit(1) -if not sys.argv[1] == "deepin" and not sys.argv[1] == "defult" and not sys.argv[1] == "recovery" or sys.argv[1] == "--help": - Help() - sys.exit(1) -things = "" -if sys.argv[1] == "deepin": - things = ChangeDeepinWineOpenFileDialogDeepinDialog() -elif sys.argv[1] == "defult": - things = ChangeDeepinWineOpenFileDialogDefult() -elif sys.argv[1] == "recovery": - os.system("sudo apt reinstall deepin-wine-helper:i386") - sys.exit(0) -else: - print("参数错误!") - Help() - sys.exit(1) -if things == False or things == "": - print("无法更新配置:配置不准重复更新") - sys.exit(1) -write_txt("/opt/deepinwine/tools/run_v3.sh", things) -sys.exit(0) diff --git a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk b/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk deleted file mode 100755 index 6462df2..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk.desktop b/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk.desktop deleted file mode 100755 index bfd16c8..0000000 --- a/deb/opt/apps/deepin-wine-runner/helperset/deepin-wine-venturi-setter-dtk.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Categories=System -Exec=deepin-wine-venturi-setter-dtk -Icon=/opt/apps/deepin-wine-venturi-setter/logo.png -Name=deepin wine 文管设置器 -StartupNotify=true -Terminal=false -Type=Application \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/helperset/logo.png b/deb/opt/apps/deepin-wine-runner/helperset/logo.png deleted file mode 100755 index b164d46..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/helperset/logo.png and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/information.json b/deb/opt/apps/deepin-wine-runner/information.json deleted file mode 100755 index 004ebd1..0000000 --- a/deb/opt/apps/deepin-wine-runner/information.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "Version": "3.2.1", - "Time": "2023-04-29 21:32:03 Linux-5.15.77-amd64-desktop-x86_64-with-Deepin-20.9-apricot", - "Thank": [ - "感谢 RacoonGX 的付出与贡献", - "感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》:https://bbs.deepin.org/post/247720", - "感谢 @豪 提供程序图标", - "感谢 @鹤舞白沙 对程序文案进行优化以及编写《Wine运行器和Wine打包器傻瓜式使用教程(小白专用) 》:https://bbs.deepin.org/post/246837", - "感谢 @璀璨星空 提供的彩蛋图标", - "感谢 @Bail 反馈的更新策略问题", - "感谢 @白水 反馈的安装 exagear 后无法识别和调用 box86 的问题", - "感谢 @汐光. 提供的翻译接口", - "感谢 @鹤舞白沙 专门为小白用户编写的使用 Wine 运行器非基于生态适配脚本的程序打包教程", - "感谢 @牦牛儿苗 进行了龙芯 3a5000 平台的测试与移植", - "感谢 @鹤舞白沙 优化了程序文案", - "感谢 @豪 的程序测试和制作的论坛 https://gfdgdxi.flarum.cloud/", - "感谢 @185******67 反馈的 2.4.0 无法打开 Visual Basic 组件安装工具的问题", - "感谢 @shenmo 提供的 在打包器的 postrm 脚本添加 kill.sh、追加参数改为 --uri xxxxxxx、独立生成容器 7z 文件的功能", - "感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301", - "感谢 @zhangs https://bbs.deepin.org/post/227948", - "感谢 @gtjmaster https://bbs.deepin.org/post/225509", - "感谢 @统信UCARE服务 https://mp.weixin.qq.com/s/iOdfNv6phc8F4inackFFTw", - "感谢 @星火应用商店 提供部分安装包的源以及本程序的下载地址", - "感谢 @delsin 和 @神末shenmo 在 deepin 论坛提供打包器打包的 deb 包自动删除容器的建议", - "感谢 @shenmo 反馈的 2.1.0 打包器问题和 2.1.0-1 终端调用问题", - "感谢 @GershonWang 在 https://github.com/gfdgd-xi/deep-wine-runner/issues/1 提供窗口居中的建议", - "感谢 @134******28 和 @sgb76 提供的新程序 GUI 布局和实现代码", - "感谢 @sgb76 为 Wine 打包器(非生态适配脚本)打包的 i386 deb 提供建议", - "感谢 @PossibleVing 提供的新版应用图标", - "感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题", - "感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本", - "感谢 @王俊文 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试", - "感谢 @cuisirwork 提供的提供视频教程的建议", - "感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包", - "感谢 @季星火 反馈的无法使用该程序删除生成的 .desktop 的问题", - "感谢 @ZYH 提供的敏感词列表", - "感谢 @五行缺钱 反馈的 2.0.0 在 Deepin 23 缺失依赖 toilet 的问题", - "感谢 @云的眼泪 @zhengjl 反馈的 2.0.0 发布忘记把安装包传蓝奏云的问题", - "感谢 @虚幻的早晨 提出的添加 DXVK、VKD3D 的功能(VKD3D 暂未实现)", - "感谢 @以勒 修改 Dll 提取工具提示文本的建议", - "感谢 @历山居士 反馈的获取自动配置容器脚本工具无法正常加载数据的问题", - "感谢 @Nick @奋斗ing 反馈的 2.1.0-2 的快捷方式故障", - "感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试,以及组件安装工具在 arm 架构的异常", - "感谢 @云的眼泪 反馈的 2.1.0-2 更新死循环的问题,可见:https://bbs.deepin.org/post/243241,以及感谢 @神末shenmo @忘记、过去 和 @历山居士 的讨论", - "感谢 @186******75 反馈的 2.2.0 基于生态适配脚本打包器对话框异常的问题", - "感谢微信用户 @华为 @办公助手 @白水 @北冥没有鱼 @俊生鹏程 @^♀莫離♪^ @姚洪安 @гυи @杨飞 在 arm(飞腾/鲲鹏)架构上提供提供测试与帮助", - "感谢 @办公助手 提供的 2.4.0 打包器支持生成的 arm 架构 deb 包同时支持 UOS box86+exagear 的建议", - "", - "感谢统信在 Wine 生态适配活动中提供的打包脚本", - "也感谢 Deepin Wine 团体制作的 Deepin Wine 和对应的 Deepin Wine Tools,对本程序有很大的帮助", - "也感谢 DXVK 的开发者开发了 DXVK 这个程序,项目链接:https://github.com/doitsujin/dxvk", - "也感谢 WineHQ 开发团队开发的 WineHQ,项目网址:https://dl.winehq.org/", - "也感谢来自 Vek 的灵感和 Vek 开发者的支持,项目链接:https://jihulab.com/vk", - "最后也感谢支持本程序的用户和上传相关软件运行情况数据的用户,有你们的支持和使用,使这个程序变得更好", - "", - "可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的感谢!", - "如果上面有遗漏,请向我反馈补充" - ] -} \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/desktop/deepin-wine-runner-keyboard.desktop b/deb/opt/apps/deepin-wine-runner/key/desktop/deepin-wine-runner-keyboard.desktop deleted file mode 100755 index 1aba0c6..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/desktop/deepin-wine-runner-keyboard.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Application -X-Categories=System;Wine; -Exec=@programPath@/key-get.py -Icon=@programPath@/../deepin-wine-runner.svg -Name=Wine Runner -Name[zh]=Wine 运行器快捷键服务 -Terminal=false -StartupNotify=true -Keywords=exe;scr; diff --git a/deb/opt/apps/deepin-wine-runner/key/key-add-gui.py b/deb/opt/apps/deepin-wine-runner/key/key-add-gui.py deleted file mode 100755 index 13fe039..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/key-add-gui.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import traceback -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/..") - -import os -import sys -import json -import dbus -import threading -from UI.KeyAddGui import * -import PyQt5.QtWidgets as QtWidgets - -keyListDebianMap = [[], ["shift"], ["ctrl"], ["alt"], ["ctrl", "alt"], ["ctrl", "shift"], ["alt", "shift"]] -keyList = ["无快捷键", "shift", "ctrl", "alt", "ctrl+alt", "ctrl+shift", "alt+shift"] - -class Check: - def VersionCheck(): - try: - bus = dbus.SessionBus() - bus.get_object("com.deepin.daemon.Keybinding", "/com/deepin/daemon/Keybinding").List() - #int("a") - return True - except: - print("无法检测到 Deepin/UOS 快捷键服务") - return False - def CheckThreading(): - if Check.VersionCheck(): - ui.startServer.setDisabled(True) - ui.stopServer.setDisabled(True) - ui.setAutoStart.setDisabled(True) - ui.setUnautoStart.setDisabled(True) - ui.editButton.setDisabled(True) - ui.keyBoardList.setDisabled(True) - ui.delectButton.setDisabled(True) - -def Clear(): - #ui.keyBoardList.model().removeRows(0, ui.keyBoardList.model().rowCount()) - - model = QtCore.QStringListModel(window) - try: - with open(f"{programPath}/list/KeyList.json", "r") as file: - lists = [] - for i in json.loads(file.read()): - #lists.append(f"{i[0]}({'+'.join(i[0: -1])}),{i[-1]}") - choice = i - #ui.localKeyboardChoose.setCurrentIndex(keyListDebianMap.index(choice[:-2])) - newList = [] - newList.append([keyListDebianMap.index(choice[:-2]), choice[-2]]) - # 解析命令 - command = choice[-1] - # 筛掉路径 - command = command[command[1:].index("'") + 2:].strip() - # 筛出其中一个快捷键 - newList.append([command[command.index(" ") - 1]]) - command = command[command.index(" ") + 2:] - # 读 exe - newList.insert(0, command[:command.index("'")]) - command = command[command.index("'") + 1: ].strip() - # 读最后的快捷键 - newList[2].insert(0, int(command)) - print(newList) - lists.append(f"{newList[0]}({'+'.join(keyListDebianMap[newList[1][0]])}+{newList[1][1]})=>({'+'.join(keyListDebianMap[newList[2][0]])}+{newList[2][1]})") - model.setStringList(lists) - ui.keyBoardList.setModel(model) - except: - traceback.print_exc() - -class Click: - def AddButton(): - os.system(f"'{programPath}/keyboard-add-gui.py'") - Clear() - - def EditButton(): - os.system(f"'{programPath}/keyboard-add-gui.py' {ui.keyBoardList.currentIndex().row()}") - Clear() - - def DeleteButton(): - try: - with open(f"{programPath}/list/KeyList.json", "r") as file: - lists = json.loads(file.read()) - del lists[ui.keyBoardList.currentIndex().row()] - with open(f"{programPath}/list/KeyList.json", "w") as file: - file.write(json.dumps(lists)) - Clear() - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - - -if __name__ == "__main__": - app = QtWidgets.QApplication(sys.argv) - window = QtWidgets.QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(window) - # 连接槽 - ui.addButton.clicked.connect(Click.AddButton) - ui.editButton.clicked.connect(Click.EditButton) - ui.delectButton.clicked.connect(Click.DeleteButton) - ui.startServer.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"nohup '{programPath}/key-get.py' &"]).start()) - ui.stopServer.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/stop.sh'"]).start()) - ui.setAutoStart.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"pkexec '{programPath}/start-auto-server.sh'"]).start()) - ui.setUnautoStart.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"pkexec '{programPath}/stop-auto-server.sh'"]).start()) - window.show() - threading.Thread(target=Check.CheckThreading).start() - Clear() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/key-get.py b/deb/opt/apps/deepin-wine-runner/key/key-get.py deleted file mode 100755 index 7a0ecbb..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/key-get.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 -######################### -# 版本:1.0.0 -# Python -######################### -import os -import sys -import time -import json -import threading -import traceback -import pynput.keyboard as keyboard -keyList = [] -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -keyChangeMap = [ - ["ctrl", keyboard.Key.ctrl], - ["alt", keyboard.Key.alt], - ["esc", keyboard.Key.esc], - ["enter", keyboard.Key.enter] -] -keyMap = [] -for i in os.listdir(f"{programPath}/list"): - print(i) - try: - file = open(f"{programPath}/list/{i}", "r") - keyMapTemp = json.loads(file.read()) - except: - print(f"{programPath}/list/{i} 读取失败!") - continue - for i in keyMapTemp: - keyMap.append(i) -for i in range(len(keyMap)): - for k in range(len(keyMap[i])): - for j in keyChangeMap: - if keyMap[i][k] == j[0]: - keyMap[i][k] = j[1] - continue - try: - keyMap[i][k] = keyMap[i][k].replace("{programPath}", programPath) - except: - pass - -print(keyList) -def on_press(key): - try: - if key.char in keyList: - # 重复的值就不认了,摊牌了 - return - keyList.append(key.char) - print(f'alphanumeric key {key.char} pressed') - except AttributeError: - keyList.append(key) - print(f'special key {key} pressed') - -def on_release(key): - print(f'{key} released') - try: - del keyList[keyList.index(key.char)] - except AttributeError: - del keyList[keyList.index(key)] - except: - traceback.print_exc() - -def ReadKey(): - next = False - for i in keyMap: - for k in range(0, len(i) - 1): - k = i[k] - if not k in keyList: - next = True - break - if not next: - # 执行命令 - os.system(i[-1]) - # 必须等待按键全部松开才行 - while len(keyList) != 0: - time.sleep(0.01) - - -def Read(): - while True: - ReadKey() - if os.path.exists("/tmp/deepin-wine-runner-keyboard-exit"): - # 移除文件 - try: - os.remove("/tmp/deepin-wine-runner-keyboard-exit") - except: - traceback.print_exc() - listener.stop() - break - time.sleep(0.01) - -# Lock 锁防止多次调用 -#if os.path.exists("/tmp/deepin-wine-runner-keyboard-lock"): -# print("不可多次调用") -# print("锁 /tmp/deepin-wine-runner-keyboard-lock 已存在") -# sys.exit(1) -#os.mknod("/tmp/deepin-wine-runner-keyboard-lock") -threading.Thread(target=Read).start() -with keyboard.Listener( - on_press=on_press, - on_release=on_release) as listener: - listener.join() -os.remove("/tmp/deepin-wine-runner-keyboard-lock") diff --git a/deb/opt/apps/deepin-wine-runner/key/keyboard-add-gui.py b/deb/opt/apps/deepin-wine-runner/key/keyboard-add-gui.py deleted file mode 100755 index a530cf0..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/keyboard-add-gui.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string -sys.path.append(f"{programPath}/..") - -import os -import sys -import dbus -import json -import threading -import traceback -from UI.KeyAddKeyboardGui import * -import PyQt5.QtWidgets as QtWidgets - -keyList = ["无快捷键", "shift", "ctrl", "alt", "ctrl+alt", "ctrl+shift", "alt+shift"] -keyListDeepinMap = ["", "", "", "", "", "", ""] -keyListDebianMap = [[], ["shift"], ["ctrl"], ["alt"], ["ctrl", "alt"], ["ctrl", "shift"], ["alt", "shift"]] - -class Check: - def VersionCheck(): - try: - bus = dbus.SessionBus() - bus.get_object("com.deepin.daemon.Keybinding", "/com/deepin/daemon/Keybinding").List() - #int("a") - return True - except: - print("无法检测到 Deepin/UOS 快捷键服务") - return False - -class Click: - def LocalValueChange(): - ui.wineKeyboardChoose.setCurrentIndex(ui.localKeyboardChoose.currentIndex()) - - def LocalKeyChange(): - ui.wineKey.setText(ui.localKey.text()) - - def AddButton(): - # 完整性检测 - if ui.exeName.text() == "" or ui.localKey.text() == "" or ui.wineKey.text() == "": - QtWidgets.QMessageBox.critical(window, "错误", "您的信息暂未填写完整") - return - if ui.localKey.text()[0] == " " or ui.wineKey.text()[0] == " ": - QtWidgets.QMessageBox.critical(window, "错误", "映射快捷键的第一位不能为空格") - return - # Deepin/UOS 的情况 - if Check.VersionCheck(): - # 接入 dbus - try: - bus = dbus.SessionBus() - bus.get_object("com.deepin.daemon.Keybinding", "/com/deepin/daemon/Keybinding").Add( - ui.exeName.text(), - f"'{programPath}/sendkeys.sh' {ui.wineKey.text()[0]} '{ui.exeName.text()}' {ui.wineKeyboardChoose.currentIndex()}", - f"{keyListDeepinMap[ui.localKeyboardChoose.currentIndex()]}{ui.localKey.text()[0]}" - ) - QtWidgets.QMessageBox.information(window, "提示", "添加成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - return - keyboardList = [] - if os.path.exists(f"{programPath}/list/KeyList.json"): - try: - with open(f"{programPath}/list/KeyList.json") as file: - keyboardList = json.loads(file.read()) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - return - print(keyboardList) - addList = [] - addList = keyListDebianMap[ui.localKeyboardChoose.currentIndex()][:] - print(keyListDebianMap) - print(addList) - addList.append(ui.localKey.text()[0]) - print(1, addList) - addList.append(f"'{programPath}/sendkeys.sh' {ui.wineKey.text()[0]} '{ui.exeName.text()}' {ui.wineKeyboardChoose.currentIndex()}") - print(2, addList) - print(addList) - try: - keyboardList[int(sys.argv[1])] = addList - except: - keyboardList.append(addList) - try: - with open(f"{programPath}/list/KeyList.json", "w") as file: - file.write(json.dumps(keyboardList)) - QtWidgets.QMessageBox.information(window, "提示", "添加成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc()) - - -if __name__ == "__main__": - app = QtWidgets.QApplication(sys.argv) - window = QtWidgets.QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(window) - # 添加选项 - ui.localKeyboardChoose.addItems(keyList) - ui.wineKeyboardChoose.addItems(keyList) - # 读取程序参数 - try: - with open(f"{programPath}/list/KeyList.json") as file: - keyboardList = json.loads(file.read()) - choice = keyboardList[int(sys.argv[1])] - ui.localKeyboardChoose.setCurrentIndex(keyListDebianMap.index(choice[:-2])) - ui.localKey.setText(choice[-2]) - # 解析命令 - command = choice[-1] - # 筛掉路径 - command = command[command[1:].index("'") + 2:].strip() - # 筛出其中一个快捷键 - ui.wineKey.setText(command[command.index(" ") - 1]) - command = command[command.index(" ") + 2:] - # 读 exe - ui.exeName.setText(command[:command.index("'")]) - command = command[command.index("'") + 1: ].strip() - # 读最后的快捷键 - ui.wineKeyboardChoose.setCurrentIndex(int(command)) - except: - pass - # 连接槽 - ui.addButton.clicked.connect(Click.AddButton) - ui.localKeyboardChoose.currentIndexChanged.connect(Click.LocalValueChange) - ui.localKey.textChanged.connect(Click.LocalKeyChange) - window.show() - #threading.Thread(target=Check.CheckThreading).start() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/list/KeyList.json b/deb/opt/apps/deepin-wine-runner/key/list/KeyList.json deleted file mode 100755 index fe51488..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/list/KeyList.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/deb/opt/apps/deepin-wine-runner/key/replace.py b/deb/opt/apps/deepin-wine-runner/key/replace.py deleted file mode 100755 index 9a11ac1..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/replace.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/python3 -import os -import sys -file = open(sys.argv[1], "r") -things = file.read().replace(sys.argv[2], sys.argv[3]) -file.close() -file = open(sys.argv[1], "w") -file.write(things) -file.close() \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/sendkeys.exe b/deb/opt/apps/deepin-wine-runner/key/sendkeys.exe deleted file mode 100755 index cf6d9de..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/key/sendkeys.exe and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/key/sendkeys.sh b/deb/opt/apps/deepin-wine-runner/key/sendkeys.sh deleted file mode 100755 index e45511c..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/sendkeys.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -# $1 key value -# $2 process name , default QQ|TIM -# $3 control mode , default ctrl+alt -# 0 no control key -# 1 shift+ -# 2 ctrl+ -# 3 alt+ -# 4 ctrl+alt+ -# 5 ctrl+shift+ -# 6 alt+shift+ - -SHELL_DIR=$(dirname $0) -SHELL_DIR=$(realpath "$SHELL_DIR") -if [ $SPECIFY_SHELL_DIR ]; then - SHELL_DIR=$SPECIFY_SHELL_DIR -fi - -get_wine_by_pid() -{ - cat /proc/$1/maps | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 | awk '{print $6}' -} - -is_wine_process() -{ - wine_module=$(get_wine_by_pid $1) - if [ -z "$wine_module" ];then - wine_module=$(cat /proc/$1/maps | grep -E "\/wineserver$" | head -1) - fi - echo $wine_module -} - -get_prefix_by_pid() -{ - WINE_PREFIX=$(xargs -0 printf '%s\n' < /proc/$1/environ | grep WINEPREFIX) - WINE_PREFIX=${WINE_PREFIX##*=} - if [ -z "$WINE_PREFIX" ] && [ -n "$(is_wine_process $1)" ]; then - #不指定容器的情况用默认容器目录 - WINE_PREFIX="$HOME/.wine" - fi - WINE_PREFIX=$(realpath $WINE_PREFIX) - echo $WINE_PREFIX -} - -get_bottle_path_by_process_id() -{ - PID_LIST="$1" - PREFIX_LIST="" - - for pid_var in $PID_LIST ; do - WINE_PREFIX=$(get_prefix_by_pid $pid_var) - for path in $(echo -e $PREFIX_LIST) ; do - prefix=${path#*=} - if [ "$prefix" == "$WINE_PREFIX" ]; then - WINE_PREFIX="" - fi - done - if [ -n "$WINE_PREFIX" ];then - PREFIX_LIST+="\n$pid_var=$WINE_PREFIX" - fi - done - echo -e $PREFIX_LIST -} - -get_bottle_path_by_process_name() -{ - PID_LIST="" - for pid_var in $(ps -ef | grep -E -i "$1" | grep -v grep | awk '{print $2}');do - #通过判断是否加载wine来判断是不是wine进程 - if [ -n "$(is_wine_process $pid_var)" ];then - PID_LIST+=" $pid_var" - fi - done - get_bottle_path_by_process_id "$PID_LIST" -} - -send_to_process() -{ - if [ -z "$2" ]; then - return 0 - fi - - for path in $(get_bottle_path_by_process_name $2); do - proc_pid=${path%=*} - prefix=${path#*=} - wine_cmd=$(get_wine_by_pid $proc_pid) - wine_name=$(echo $wine_cmd | awk -F / '{print $(NF-2)}') - if command -v $wine_name > /dev/null 2>&1; then - wine_cmd="$wine_name" - fi - echo "send to $path by $wine_cmd" - - env WINEPREFIX="$prefix" "$wine_cmd" "$SHELL_DIR/sendkeys.exe" $1 $3 - done -} - -if [ -z "$1" ]; then - echo "Please input a key [a-zA-Z]" - exit 0 -fi - -if [ -n "$2" ]; then - send_to_process $1 $2 $3 -else - send_to_process $1 "QQ|TIM" -fi diff --git a/deb/opt/apps/deepin-wine-runner/key/start-auto-server.sh b/deb/opt/apps/deepin-wine-runner/key/start-auto-server.sh deleted file mode 100755 index 0e73207..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/start-auto-server.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# 使用系统默认的 Bash -################################################################################################################# -# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:2.4.0 -# 更新时间:2022年10月11日 -# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 -# 基于 Bash 制作 -################################################################################################################# -cd `dirname $0` -programPath=$(cd "$(dirname "$0")";pwd) -echo $programPath -if [[ -f "/etc/xdg/autostart/deepin-wine-runner-keyboard.desktop" ]]; then - # 判断是否自启动,已经自启动就不再考虑 - echo "文件已存在,取消" - exit 1 -fi -sudo cp -rv desktop/deepin-wine-runner-keyboard.desktop /etc/xdg/autostart/deepin-wine-runner-keyboard.desktop -sudo ./replace.py /etc/xdg/autostart/deepin-wine-runner-keyboard.desktop @programPath@ "$programPath" \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/stop-auto-server.sh b/deb/opt/apps/deepin-wine-runner/key/stop-auto-server.sh deleted file mode 100755 index 5226cec..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/stop-auto-server.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# 使用系统默认的 Bash -################################################################################################################# -# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:2.4.0 -# 更新时间:2022年10月11日 -# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 -# 基于 Bash 制作 -################################################################################################################# -programPath=$(cd "$(dirname "$0")";pwd) -cd `dirname $0` -echo $programPath -if [[ ! -f "/etc/xdg/autostart/deepin-wine-runner-keyboard.desktop" ]]; then - # 判断是否自启动,已经自启动就不再考虑 - echo "文件已存在,取消" - exit 1 -fi -sudo rm -rfv /etc/xdg/autostart/deepin-wine-runner-keyboard.desktop \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/stop.sh b/deb/opt/apps/deepin-wine-runner/key/stop.sh deleted file mode 100755 index 0397809..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/stop.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -touch /tmp/deepin-wine-runner-keyboard-exit \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/key/unlock.sh b/deb/opt/apps/deepin-wine-runner/key/unlock.sh deleted file mode 100755 index 85b1e54..0000000 --- a/deb/opt/apps/deepin-wine-runner/key/unlock.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -rm /tmp/deepin-wine-runner-keyboard-lock \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/kill.sh b/deb/opt/apps/deepin-wine-runner/kill.sh deleted file mode 100755 index bf729ff..0000000 --- a/deb/opt/apps/deepin-wine-runner/kill.sh +++ /dev/null @@ -1,278 +0,0 @@ -#!/bin/bash - -APP_NAME="QQ" -LOG_FILE=$0 -SHELL_DIR=$(dirname $0) -SHELL_DIR=$(realpath "$SHELL_DIR") -if [ $SPECIFY_SHELL_DIR ]; then - SHELL_DIR=$SPECIFY_SHELL_DIR -fi - -PUBLIC_DIR="/var/public" - -UsePublicDir() -{ - if [ -z "$USE_PUBLIC_DIR" ]; then - echo "Don't use public dir" - return 1 - fi - if [ ! -d "$PUBLIC_DIR" ];then - echo "Not found $PUBLIC_DIR" - return 1 - fi - if [ ! -r "$PUBLIC_DIR" ];then - echo "Can't read for $PUBLIC_DIR" - return 1 - fi - if [ ! -w "$PUBLIC_DIR" ];then - echo "Can't write for $PUBLIC_DIR" - return 1 - fi - if [ ! -x "$PUBLIC_DIR" ];then - echo "Can't excute for $PUBLIC_DIR" - return 1 - fi - - return 0 -} - -WINE_BOTTLE="$HOME/.deepinwine" - -if UsePublicDir;then - WINE_BOTTLE="$PUBLIC_DIR" -fi - -get_wine_by_pid() -{ - wine_path=$(cat /proc/$1/maps | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 | awk '{print $6}') - if [ -z "$wine_path" ];then - cat /proc/$1/cmdline| xargs -0 -L1 -I{} echo {} | grep -E "\/wine$|\/wine64$|\/wine |\/wine64 " | head -1 - else - echo $wine_path - fi -} - -is_wine_process() -{ - wine_module=$(get_wine_by_pid $1) - if [ -z "$wine_module" ];then - wine_module=$(cat /proc/$1/maps | grep -E "\/wineserver$" | head -1) - fi - echo $wine_module -} - -get_prefix_by_pid() -{ - WINE_PREFIX=$(xargs -0 printf '%s\n' < /proc/$1/environ | grep WINEPREFIX) - WINE_PREFIX=${WINE_PREFIX##*=} - if [ -z "$WINE_PREFIX" ] && [ -n "$(is_wine_process $1)" ]; then - #不指定容器的情况用默认容器目录 - WINE_PREFIX="$HOME/.wine" - fi - if [ -n "$WINE_PREFIX" ];then - WINE_PREFIX=$(realpath $WINE_PREFIX) - echo $WINE_PREFIX - fi -} - -get_wineserver() -{ - if [ -z "$1" ];then - return - fi - targ_prefix=$(realpath $1) - ps -ef | grep wineserver | while read server_info ;do - debug_log_to_file "get server info: $server_info" - server_pid=$(echo $server_info | awk '{print $2}') - server_prefix=$(get_prefix_by_pid $server_pid) - debug_log_to_file "get server pid $server_pid, prefix: $server_prefix" - - if [ "$targ_prefix" = "$server_prefix" ];then - server=$(echo $server_info | awk '{print $NF}') - if [ "-p0" = "$server" ];then - server=$(echo $server_info | awk '{print $(NF-1)}') - fi - debug_log_to_file "get server $server" - echo $server - return - fi - done -} - -init_log_file() -{ - if [ -d "$DEBUG_LOG" ];then - LOG_DIR=$(realpath $DEBUG_LOG) - if [ -d "$LOG_DIR" ];then - LOG_FILE="${LOG_DIR}/${LOG_FILE##*/}.log" - echo "" > "$LOG_FILE" - debug_log "LOG_FILE=$LOG_FILE" - fi - fi -} - -debug_log_to_file() -{ - if [ -d "$DEBUG_LOG" ];then - strDate=$(date) - echo -e "${strDate}:${1}" >> "$LOG_FILE" - fi -} - -debug_log() -{ - strDate=$(date) - echo "${strDate}:${1}" -} - -init_log_file - -get_bottle_path_by_process_id() -{ - PID_LIST="$1" - PREFIX_LIST="" - - for pid_var in $PID_LIST ; do - WINE_PREFIX=$(get_prefix_by_pid $pid_var) - #去掉重复项 - for path in $(echo -e $PREFIX_LIST) ; do - if [[ $path == "$WINE_PREFIX" ]]; then - WINE_PREFIX="" - fi - done - if [ -d "$WINE_PREFIX" ]; then - debug_log_to_file "found $pid_var : $WINE_PREFIX" - PREFIX_LIST+="\n$WINE_PREFIX" - fi - done - echo -e $PREFIX_LIST -} - -get_pid_by_process_name() -{ - PID_LIST="" - for pid_var in $(ps -ef | grep -E -i "$1" | grep -v grep | awk '{print $2}');do - #通过判断是否加载wine来判断是不是wine进程 - if [ -n "$(is_wine_process $pid_var)" ];then - PID_LIST+=" $pid_var" - fi - done - echo "$PID_LIST" -} - -get_bottle_path_by_process_name() -{ - PID_LIST=$(get_pid_by_process_name $1) - debug_log_to_file "get pid list: $PID_LIST" - get_bottle_path_by_process_id "$PID_LIST" -} - -get_bottle_path() -{ - if [ -z "$1" ];then - return 0 - fi - - if [ -f "$1/user.reg" ]; then - realpath "$1" - return 0 - fi - - if [ -f "$WINE_BOTTLE/$1/user.reg" ]; then - realpath "$WINE_BOTTLE/$1" - return 0 - fi - get_bottle_path_by_process_name "$1" -} - -kill_app() -{ - debug_log "try to kill $1" - for path in $(get_bottle_path $1); do - if [ -n "$path" ];then - WINESERVER=$(get_wineserver "$path") - - if [ -f "$WINESERVER" ];then - debug_log "kill $path by $WINESERVER" - env WINEPREFIX="$path" "$WINESERVER" -k - fi - - PID_LIST=$(get_pid_by_process_name "exe|wine") - for tag_pid in $PID_LIST; do - bottle=$(get_bottle_path_by_process_id "$tag_pid") - bottle=${bottle:1} - if [ "$path" = "$bottle" ];then - echo "kill $tag_pid for $bottle" - kill -9 $tag_pid - fi - done - fi - done - - #Kill defunct process - ps -ef | grep -E "$USER.*exe.*" - ps -ef | grep -E "$USER.*exe.*" | grep -v grep | awk '{print $2}' | xargs -i kill -9 {} -} - -get_tray_window() -{ - $SHELL_DIR/get_tray_window | grep window_id: | awk -F: '{print $2}' -} - -get_stacking_window() -{ - xprop -root _NET_CLIENT_LIST_STACKING | awk -F# '{print $2}' | sed -e 's/, / /g' -} - -get_window_pid() -{ - for winid in $(echo "$1" | sed -e 's/ /\n/g') ; - do - xprop -id $winid _NET_WM_PID | awk -F= '{print $2}' - done -} - -get_window_bottle() -{ - debug_log_to_file "get_window_bottle $1" - PID_LIST=$(get_window_pid "$1") - debug_log_to_file "get_window_bottle pid list: $PID_LIST" - get_bottle_path_by_process_id "$PID_LIST" -} - -get_active_bottles() -{ - TRAYWINDOWS=$(get_tray_window) - STACKINGWINDOWS=$(get_stacking_window) - debug_log_to_file "tray window id: $TRAYWINDOWS" - debug_log_to_file "stacking window id: $STACKINGWINDOWS" - PID_LIST="$TRAYWINDOWS $STACKINGWINDOWS" - get_window_bottle "$PID_LIST" -} - -kill_exit_block_app() -{ - TAGBOTTLE=$(get_bottle_path $1) - debug_log "tag bottle: $TAGBOTTLE" - ACTIVEBOTTLES=$(get_active_bottles) - debug_log "active bottles: $ACTIVEBOTTLES" - - if [[ "$ACTIVEBOTTLES" != *"$TAGBOTTLE"* ]]; then - kill_app "$TAGBOTTLE" - fi -} - -#get_active_bottles -#exit - -debug_log "kill $1 $2" - -if [ -n "$1" ]; then - APP_NAME="$1" -fi - -if [ "$2" = "block" ]; then - kill_exit_block_app $APP_NAME $3 -else - kill_app $APP_NAME -fi diff --git a/deb/opt/apps/deepin-wine-runner/launch.sh b/deb/opt/apps/deepin-wine-runner/launch.sh deleted file mode 100755 index 674905e..0000000 --- a/deb/opt/apps/deepin-wine-runner/launch.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -XDG_CURRENT_DESKTOP="Deepin" -$1 -platformtheme deepin "$@" diff --git a/deb/opt/apps/deepin-wine-runner/package-script.zip b/deb/opt/apps/deepin-wine-runner/package-script.zip deleted file mode 100755 index 7e0b555..0000000 Binary files a/deb/opt/apps/deepin-wine-runner/package-script.zip and /dev/null differ diff --git a/deb/opt/apps/deepin-wine-runner/pardus-chroot b/deb/opt/apps/deepin-wine-runner/pardus-chroot deleted file mode 100755 index 7ae43f6..0000000 --- a/deb/opt/apps/deepin-wine-runner/pardus-chroot +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -set +e -DESTDIR="$1" -if [[ $UID -ne 0 ]] ; then - echo "You must be root!" - exit 1 -fi -if [[ -b "$1" ]] ; then - DESTDIR=$(mktemp -d) - mount "$1" "$DESTDIR" -fi -shift -if [[ "$DESTDIR" == "" || ! -f "$DESTDIR/etc/os-release" ]] ; then - echo "Target filesystem is invalid: $DESTDIR" - exit 1 -fi -mount --bind /dev "$DESTDIR/dev" -mount --bind /run "$DESTDIR/run" -mount --bind /media "$DESTDIR/media" -mount -t devpts devpts "$DESTDIR/dev/pts" -mount -t sysfs sysfs "$DESTDIR/sys" -mount -t proc proc "$DESTDIR/proc" -mount -t tmpfs tmpfs "$DESTDIR/dev/shm" -mount --bind /tmp "$DESTDIR/tmp" -if [[ -d /sys/firmware/efi/ ]] ; then - mount -t efivarfs efivarfs "$DESTDIR/sys/firmware/efi/efivars" -fi -#cat /etc/resolv.conf > $DESTDIR/etc/resolv.conf -#SHELL=/bin/bash unshare --fork --pid chroot "$DESTDIR" "$@" -#exit -# 下面的因为有问题,不使用 -#if [[ -d /sys/firmware/efi/ ]] ; then -# while umount "$DESTDIR/sys/firmware/efi/efivars" 2>/dev/null ; do : ;done -#fi -#for dir in dev/pts dev/shm dev sys proc run media ; do -# while umount "$DESTDIR/$dir" 2>/dev/null; do : ;done -#done -#umount -lf "$DESTDIR" 2>/dev/null diff --git a/deb/opt/apps/deepin-wine-runner/req/__init__.py b/deb/opt/apps/deepin-wine-runner/req/__init__.py deleted file mode 100755 index 935bb7c..0000000 --- a/deb/opt/apps/deepin-wine-runner/req/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# 此库用于实现 52 版不连接程序服务器(不再区分) -import requests - -unConnect = False -# 不再区分吾爱版 -#with open("/var/lib/dpkg/status", "r") as i: -# unConnect = "Package: spark-deepin-wine-runner-52" in open("/var/lib/dpkg/status", "r").read() -#if unConnect: -# print("52专版,将会无法连接服务器") - -class Respon: - text = "" - -def get(url, timeout=None): # -> requests.Response: - #if unConnect: - # 全部 Url 都拦截 - #raise Exception("52专版不支持连接服务器") - if timeout == None: - return requests.get(url) - return requests.get(url, timeout=timeout) - -def post(url, data, timeout=None): - #if unConnect: - # 全部 Url 都拦截 - # raise Exception("52专版不支持连接服务器") - if timeout == None: - return requests.post(url, data) - return requests.post(url, data, timeout=timeout) \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/sparkstore.list b/deb/opt/apps/deepin-wine-runner/sparkstore.list deleted file mode 100755 index 0563772..0000000 --- a/deb/opt/apps/deepin-wine-runner/sparkstore.list +++ /dev/null @@ -1 +0,0 @@ -deb [by-hash=force] https://d.store.deepinos.org.cn / diff --git a/deb/opt/apps/deepin-wine-runner/trans/__init__.py b/deb/opt/apps/deepin-wine-runner/trans/__init__.py deleted file mode 100644 index d86e5b8..0000000 --- a/deb/opt/apps/deepin-wine-runner/trans/__init__.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 -import os -import json -import requests -import traceback - -typeList = [ - "Auto", - "ZH_CN2JA", - "ZH_CN2KR", - "ZH_CN2EN" -] - -class Trans(): - isTrans = False - unCloudTrans = False - word = {} - fileName = "" - - def __init__(self, lang="zh_CN", fileName=f"trans.json") -> None: - self.fileName = fileName - self.isTrans = (lang != "zh_CN") - if self.isTrans: - try: - if not os.path.exists(fileName): - with open(fileName, "w") as file: - file.write("{}") - with open(fileName, "r") as file: - self.word = json.loads(file.read()) - except: - traceback.print_exc() - self.isTrans = False - - def transe(self, temp, text) -> str: - if not self.isTrans: - return text - try: - return self.word[text].replace("(", "(").replace(")", ")") - except: - if self.unCloudTrans: - return text - # 机翻 - data = { 'doctype': 'json', 'type': 'auto','i': text} - jsonReturn = requests.post("http://fanyi.youdao.com/translate", data=data).json()["translateResult"] - transText = "" - for i in jsonReturn: - print(i[0]) - transText += f'{i[0]["tgt"]}\n' - if "\n" in text: - transText = transText.replace("\n\n", "\n")[:-1] - else: - transText = transText[:-1] - self.word[text] = transText.replace("(", "(").replace(")", ")") - try: - with open(self.fileName, "w") as file: - file.write(json.dumps(self.word, ensure_ascii=False)) - except: - traceback.print_exc() - print(f"{text}=>{transText}") - return transText diff --git a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-packager.json b/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-packager.json deleted file mode 100644 index 38a18e2..0000000 --- a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-packager.json +++ /dev/null @@ -1 +0,0 @@ -{"浏览……": "Browse...", "打包……": "Packaging...", "安装打包完成的 deb……": "Install complete packaging deb...", "根据填写内容打包模板": "According to fill in the content packaging template", "打包容器 7z 包": "Packing container 7 z packages", "设置卸载该 deb 后自动删除该容器": "Set automatically deleted the container after unloading the deb", "使用统信 Wine 生态适配活动容器清理脚本": "Used series Wine container cleaning the ecological adaptation activities", "使用星火wine helper\n(如不勾选默认为deepin-wine-helper)": "Using the spark wine helper\n(if you don't check the default deepin - wine - helper)", "要打包的 deb 包的包名(※必填):": "To pack deb package package name (does required) :", "deb 包的版本号(※必填):": "Deb package version number (does required) :", "deb 包的说明(※必填):": "Deb package instructions (does required) :", "deb 包的维护者(※必填):": "Deb package maintainer (does required) :", "要解压的 wine 容器的名称(※必填):": "To extract the name of the wine containers (does required) :", "要打包的 wine 容器路径(※必填):": "To the wine packaging container path (does required) :", "wine 容器里需要运行的可执行文件路径(※必填):": "Wine containers need to run the executable file path (does required) :", "要显示的 .desktop 文件的分类(※必填):": "To display the desktop file classification (does required) :", "wine 容器里需要运行的可执行文件的参数:": "Wine containers need to run the executable file parameters:", "要显示的 .desktop 文件的名称(※必填):": "To display the desktop file name (does required) :", "要显示的 .desktop 文件的图标:": "The icon to display the desktop file:", "选择打包的 wine 版本(※必选):": "Choose the wine packaging version (does will choose) :", "打包 deb 的保存路径(※必填):": "Packaging deb save path (does required) :", "高级设置": "Advanced Settings", "deb 包的依赖(如无特殊需求默认即可)": "Deb package dependency (if there is no special requirements for the default)", "deb 包的推荐依赖(非强制,一般默认即可)": "Recommend relying on deb package (optional, generally the default)", "Wine 位数(只限本地需要打包集成的Wine):\n提示:32位的Wine不能使用64位容器": "Wine digits (only for local Wine packaging integration) :\nTip: 32-bit Wine 64 containers cannot be used", "deb 包选项:": "Deb package options:", "deb 的依赖(强制,如无特殊需求默认即可):": "Deb dependent (mandatory, such as no special requirements for the default) :", "deb 的推荐依赖(非强制,一般默认即可):": "Deb recommend relying on (optional, generally the default) :", "要显示的 .desktop 文件的 MimeType:": "To display the desktop MimeType file:", "打包 deb 架构:": "Packaging deb architecture:", "程序": "The program", "deb 包": "Deb package", "投稿到星火应用商店": "Contribute to spark the app store", "帮助": "help", "退出程序": "Exit the program", "只读取 Control 信息": "Only reads the Control information", "读取所有(需解包,时间较久)": "Read all (need to unpack, for a long time)", "从网页端投稿": "From the web", "使用投稿器投稿(推荐)": "Use contribute contributes (recommended)", "小提示": "tip", "Wine 运行器和 Wine 打包器傻瓜式使用教程(小白专用)\nBy @雁舞白沙": "Run Wine and Wine packaging machine fool tutorial (white)\nBy @ white goose dance", "提示:\n1、deb 打包软件包名要求:\n软件包名只能含有小写字母(a-z)、数字(0-9)、加号(+)和减号(-)、以及点号(.),软件包名最短长度两个字符;它必须以字母开头\n2、如果要填写路径,有“浏览……”按钮的是要填本计算机对应文件的路径,否则就是填写安装到其他计算机使用的路径\n3、输入 wine 的容器路径时最后面请不要输入“/”\n4、输入可执行文件的运行路径时是以“C:/XXX/XXX.exe”的格式进行输入,默认是以 C: 为开头,不用“\\”做命令的分隔,而是用“/”\n5、.desktop 的图标只支持 PNG 格式和 SVG 格式,其他格式无法显示图标\n6、路径建议不要带空格,容易出问题": "Tip:\nRequirements: 1, deb package package name\nPackage name can only contain lowercase letters (a-z), Numbers (0-9), plus sign (+) and minus (-) and dot (.), the package of the shortest length two characters;\n2, if you want to fill in the path, have \"browse...\n3, input the wine container path behind the please don't input \"/\"\n4, input the operation of the executable file path is \"C: / / XXX XXX. Exe format for input, the default is C: as the beginning, instead of a\" \\ \"do command space, with a\"/\"\n. 5, the desktop icon only supports the PNG format and SVG format, other format can not display icon\n6, the path with the blank space is not recommended, easy to a problem", "支持 png 和 svg 格式,不支持 ico 格式": "Support PNG or SVG format, the ico format is not supported", "Wine运行器和Wine打包器傻瓜式使用教程(小白专用)\nBy @雁舞白沙": "Run Wine and Wine packaging machine fool tutorial (white)\nBy @ white goose dance", "6.5.50(随便填写或填写该软件的windows版本的版本号,6.5.50只是示例)。": "6.5.50 (literally fill out or fill in the Windows version of the software version number, 6.5.50 just sample).", "随便填写或使用该软件的windows版本的软件简介。": "Fill in or use the software freely introduction to the Windows version of the software.", "填写自己的网名,若是自用软件,不上架至应用商店,不进行后续维护,可随便填写。": "Fill in his name, if self-use software, not application stores to shop, not for the follow-up maintenance, can literally fill in.", "要打包的容器所在路径,也可以选择已经好打包的 7z 文件,一般自动带出": "To packaging containers in the path, also can choose the 7 z file has good packaging, general out automatically", "选择生成 deb 包所对应的架构": "Select generate deb package of the architecture", "清理容器无用内容,一般建议勾选,最新版本默认勾选,如果有特殊需求(如容器内有 mono、gecko 等)建议取消勾选": "Clean container useless content, general advice to check, check the latest version of the default, if you have special requirements, such as container with mono, gecko, etc.) suggest cancel the check", "生成 deb 包所需的依赖,一般情况下默认即可": "Generate deb package needed to rely on, normally the default", "生成 deb 包的推荐依赖,一般情况下为空即可": "Rely on the recommendation of generated deb package, usually is empty", "使用星火 dwine helper 替换 Deepin Wine Helper,投稿星火应用商店的话建议勾选,最新版本默认勾选(如果打包 arm 包将不会提供选择)": "Using the spark dwine helper to replace Deepin Wine helper, contribute the spark app store that if checked, the latest version of the default check (if packaging arm package will not provide choice)", "填写该软件的中文或英文名称。": "Fill in Chinese or English name of this software.", "图标只支持PNG格式和SVG格式,其他格式无法显示。": "Icon only supports the PNG format and SVG format, other format cannot be displayed.", "快捷方式的 MimeType 项,一般为空即可": "The MimeType, shortcut, as a general rule, be empty", "打包的 Wine 版本,根据实际情况选择(如果打包 arm 包将不会提供选择)": "Packaging Wine version, choose according to actual situation (if packaging arm package will not provide choice)", "打包出的 deb 生成的位置,一般自动生成": "Packaging deb generation of location, general automatically generated", "程序参数,如%u,一般不需要": "Process parameters, such as % u, generally do not need", "只打包容器生成 7z 包,不做其它操作": "Packaging containers generated 7 z package only, no other operation", "构建 deb 包目录,但不打包成 deb": "Build deb package directory, but it's not packaged into deb", "查看打包过程中命令返回内容": "Check the command returns the content in the process of packaging", "点击该按钮打包生成 deb": "Click this button to generate deb package", "调用默认的 deb 安装工具安装生成的 deb": "Calls the default installed deb tools generated deb", "禁用 Mono 和 Gecko 安装器": "Disable the Mono and Gecko installer"} \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner-qemu-download.json b/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner-qemu-download.json deleted file mode 100644 index 7b8b389..0000000 --- a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner-qemu-download.json +++ /dev/null @@ -1 +0,0 @@ -{"更换源": "Change the source", "Gitlink 源(推荐)": "Gitlink source (recommended)", "备用源(只支持 IPv6 用户)": "The alternate source (only support IPv6 users)", "本地测试源(127.0.0.1)": "Local test source (127.0.0.1)", "使用前须知:\n1、Qemu 跨架构效率较低,如果有条件建议优先使用 box86、exagear 等效率较高的转换层;\n2、使用此方案需要使用到 Root 权限(需开启管理员模式)并安装 qemu-user-static;\n3、chroot 时候可能会出现问题导致程序闪退或异常,出现该问题重启电脑即可;\n4、在此环境使用 Wine 时,只能读取到您用户目录或本程序文件夹下的文件,其它路径无法读取;\n5、移除容器时请保证在这次打开电脑时没有调用过需要删除容器,如果有调用过建议重启电脑后再移除;\n6、暂时属于测试功能;": "Instructions before use:\n1, Qemu across architecture efficiency is low, if there is condition is preferred to use box86, exagear high efficiency transformation layer;\n2, use this program to need to use the Root administrator mode (open) and install qemu - user - static;\n3, when chroot flash back problems may cause the program or abnormal, the problems to restart the computer;\n4, in this environment using Wine, can only read your user directory or folder of the program files, other path cannot read;\n5, remove the container please make sure that no calls while in the open a computer need to delete the container, if there is a call after advice to restart the computer to remove;\n6, a temporary belong to test functionality;"} \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner.json b/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner.json deleted file mode 100644 index 112d2a6..0000000 --- a/deb/opt/apps/deepin-wine-runner/trans/deepin-wine-runner.json +++ /dev/null @@ -1 +0,0 @@ -{"快速启动": "Quick start", "请选择容器路径:": "Please select a container path:", "请选择要执行的程序(EXE、MSI或者命令):": "Please select the application that performs (EXE, MSI or command) :", "浏览": "browse", "请选择WINE版本:": "Please select a WINE version:", "高级功能": "Advanced features", "创建快捷方式(Desktop文件):": "Create a shortcut (Desktop file) :", "名称:": "Name:", "创建到桌面": "Create to the desktop", "创建到开始菜单": "Create to the start menu", "程序管理:": "Program management:", "提取图标": "Extract the icon", "窗口透明工具": "Transparent Windows tool", "卸载程序": "Uninstall program", "微型应用商店": "The micro app store", "获取该程序运行情况": "To get the program running situation", "检测静态下程序缺少DLL": "Test under static program lacks the DLL", "WINE配置:": "WINE configuration:", "配置容器": "Configuration of the container", "字体商店": "Font store", "RegShot": "RegShot", "星火wine配置": "The spark wine configuration", "自动/手动配置 Wine 容器": "Automatic/manual configuration Wine containers", "在此可以看到wine安装应用时的终端输出内容": "Here you can see the terminal output content of wine installation application", "运行程序": "To run the program", "终止程序": "To terminate the program", "终止指定容器的程序": "The designated container program", "程序(&P)": "Program (& P)", "安装 wine(&I)": "Install wine (& I)", "安装 wine(只限Deepin23 Preview)": "Install wine (only Deepin23 Preview)", "安装 wine(只限Deepin23 Alpha)": "Install wine (only Deepin23 Alpha)", "安装 WineHQ": "Install the WineHQ", "安装更多 Wine": "Install more Wine", "下载 Chroot 容器": "Download the Chroot container", "设置程序(&S)": "Setup (& S)", "清空软件历史记录(&C)": "Empty the software history (& C)", "清空软件缓存": "Empty the software cache", "删除程序组件": "Delete the component", "退出程序(&E)": "Exit the program (& E)", "Wine(&W)": "酒(易名)", "打开 Wine 容器目录": "Open the Wine container directory", "安装常见字体": "Common fonts installed", "安装自定义字体": "Install custom fonts", "删除选择的 Wine 容器": "Delete selected Wine vessel", "清理 Wine 容器(基于 Wine 适配活动脚本)": "Clean up the Wine containers (script) based on Wine adaptation activity", "Wine 快捷键映射": "Wine shortcut key mapping", "打包 wine 应用": "Wine packaging application", "使用官方 Wine 适配活动的脚本进行打包": "Using official script package Wine adaptation activities", "使用简易打包器进行打包(小白且无特殊需求建议使用这个)": "Using simple packaging machine for packaging (white and no special requirements for recommended this)", "从互联网获取DLL": "Get the DLL from the Internet", "从镜像获取DLL(只支持官方安装镜像,DOS内核如 Windows 95 暂不支持)": "Official from image acquisition DLL (only support the installation image, DOS kernel, such as Windows 95 temporary does not support)", "从 Geek Uninstaller 官网升级程序": "From the Geek Uninstaller website update", "删除部分 Wine 程序在启动器的快捷方式": "Delete some Wine program in a shortcut to the starter", "删除所有 Wine 程序在启动器的快捷方式": "Delete all Wine program in a shortcut to the starter", "在指定 Wine、容器安装组件": "In the designated Wine, container installation components", "在指定wine、指定容器安装 .net framework": "Container specified in the designated wine, install the.net framework", "在指定wine、指定容器安装 Visual Studio C++": "Specified in the designated wine, container install Visual Studio c + +", "在指定wine、指定容器安装 MSXML": "Install MSXML in designated wine, designated container", "在指定wine、指定容器安装 gecko": "In the designated wine, designated container installation gecko", "在指定wine、指定容器安装 mono": "Specified in the designated wine, container install mono", "在指定wine、指定容器安装 Visual Basic Runtime": "Container installation specified in the designated wine, Visual Basic Runtime", "在指定wine、指定容器安装其它运行库": "In the designated wine, designated container install other runtime", "在指定 Wine、容器运行基础应用": "In the designated Wine, container operation based applications", "打开指定wine、指定容器的控制面板": "Open the specified wine, the control panel of the specified container", "打开指定wine、指定容器的浏览器": "Open the specified wine, browser of the specified container", "打开指定wine、指定容器的注册表": "Open the specified wine, specify the registry of the vessel", "打开指定wine、指定容器的任务管理器": "Open the specified wine, specify the task manager of the vessel", "打开指定wine、指定容器的资源管理器": "Open the specified wine, specify the container resource manager", "打开指定wine、指定容器的关于 wine": "Open the specified wine, specify the vessel about wine", "设置 run_v3.sh 的文管为 Deepin 默认文管": "Set run_v3. Sh tube for Deepin tube by default", "设置 run_v3.sh 的文管为 Wine 默认文管": "Set run_v3. Sh tube for Wine tube by default", "重新安装 deepin-wine-helper": "Reinstall the deepin - wine - a helper", "使用winetricks打开指定容器": "Using winetricks open the specified container", "组件功能测试": "Component function test", "测试 Visual Basic 6 程序": "Test the Visual Basic 6 program", "测试 .net framework 程序": "Test the.net framework application", "测试 .net framework + Internet Explorer 程序": "Test the.net framework + Internet Explorer program", "启用/禁用功能": "Enable/disable function", "启用/禁用 opengl": "Enable/disable opengl", "开启 opengl": "Open the opengl", "禁用 opengl": "Disable the opengl", "安装/卸载 winbind": "Install/uninstall the winbind", "安装 winbind": "Install the winbind", "卸载 winbind": "Uninstall the winbind", "安装/卸载 DXVK": "Install/uninstall DXVK", "安装 DXVK": "Install DXVK", "卸载 DXVK": "Uninstall DXVK", "允许/禁止指定 wine 容器生成快捷方式": "Allowed/prohibited specified wine containers generated shortcuts", "允许指定 wine 容器生成快捷方式": "Allows you to specify wine containers generated shortcuts", "禁止指定 wine 容器生成快捷方式": "Designated wine containers generated shortcut is prohibited", "启用/禁用指定 wine 容器崩溃提示窗口": "Enable/disable specified wine containers collapse prompt window", "禁用指定 wine 容器崩溃提示窗口": "Disable specified wine containers collapse prompt window", "启用指定 wine 容器崩溃提示窗口": "Enable the specified wine containers collapse prompt window", "设置指定 Wine 容器代理": "Set the specified Wine vessel agent", "设置指定 wine 容器的代理": "Set the specified wine vessel agent", "禁用指定 wine 容器的代理": "Disable specified wine vessel agent", "函数顶替库列表": "Function library list", "导出函数顶替列表": "Export function list", "导入函数顶替列表": "The import function list", "编辑函数顶替库列表": "Edit function library list", "虚拟机(&V)": "The virtual machine (& V)", "使用 Virtualbox 虚拟机运行 Windows 应用": "Using Virtualbox virtual machine run Windows applications", "校验值计算(&S)": "Check value calculation (& S)", "MD5(&M)": "MD5(&M)", "SHA1(&M)": "SHA1(&M)", "Base64(建议小文件)(&B)": "Base64 (small files) proposed (& B)", "SHA256(&S)": "SHA256(谨此告知)", "SHA512(&S)": "SHA512(&S)", "云沙箱(&C)": "Cloud sandbox (& C)", "360 沙箱云": "360 the sandbox cloud", "微步云沙箱": "Micro step cloud sandbox", "VIRUSTOTAL": "VIRUSTOTAL", "日志(&L)": "Log (& L)", "查询 Dll": "Query the Dll", "日志分析": "Log analysis", "另存为日志": "Save as logs", "翻译日志(翻译后日志分析功能会故障)": "Translation log (translated will log analysis function failure)", "上传日志": "Upload the log", "容器(&C)": "The container (& C)", "解包 deb 提取容器": "Unpack the deb extraction container", "配置指定 Chroot 容器": "Configure Chroot container specified", "帮助(&H)": "Help (& H)", "查询程序在 Wine 的运行情况": "The operation of the query in the Wine", "程序官网": "The program's website", "小提示": "tip", "Wine运行器和Wine打包器傻瓜式使用教程(小白专用) By 鹤舞白沙": "Run Wine and Wine packaging machine fool (white) By using the tutorial crane dancing baisha", "更新内容": "Update the content", "谢明名单": "Iv list", "更新这个程序": "Update the program", "反馈这个程序的建议和问题": "Suggestions and feedback on this procedure", "关于这个程序": "About this program", "关于 Qt": "On Qt", "作者个人站": "The author stood", "程序论坛": "BBS program", "Gitee": "Gitee", "Github": "Github", "Gitlink": "Gitlink", "Gitlab": "Gitlab", "极狐": "A fox", "程序 Wiki": "Program the Wiki", "视频教程": "Video tutorial", "更多生态适配应用": "More ecological adaptation", "运行 Android 应用:UEngine 运行器": "Run Android applications: UEngine runner", "选择 Wine 容器版本:": "Choose the Wine container version:", "wine DEBUG 信息输出:": "Wine the DEBUG information output:", "默认 Wine:": "The default Wine:", "默认 Wine 容器:": "The default Wine container:", "使用终端打开:": "Use terminal to open:", "自定义 wine 参数:": "Custom wine parameters:", "程序主题:": "Program topics:", "Wine 默认 Mono 和 Gecko 安装器:": "Wine default Mono and Gecko installer:", "忽略未安装的 Wine:": "Ignore the Wine not installed:", "下载缓存:": "Download cache:", "图标生成:": "Icon to generate:", "自动根据EXE名称生成路径:": "Automatically generated path according to EXE name:", "开启 DEBUG 输出": "Open the DEBUG output", "保存": "save", "测试(重启后变回设置的主题)": "The theme of the test (back after restart set)", "使用终端打开(deepin 终端)": "Use terminal open (deepin terminal)", "屏蔽 Wine 默认 Mono 和 Gecko 安装器": "Shielding Wine default Mono and Gecko installer", "不显示未检测到的 Wine": "Don't show the Wine not detected", "开启下载缓存": "Open the download cache", "本软件构建的图标后面添加容器名": "Add container name behind the software build icon", "自动根据文件名生成容器路径(开启后必须通过修改默认wine容器路径才可指定其它路径,重启后生效)": "Automatic container path was generated according to the file name (open must by modifying the default after wine container path to specify other paths, to take effect after a restart)", "ISO镜像:": "ISO image:", "读取/挂载ISO镜像": "Read/mount the ISO image", "关闭/卸载ISO镜像": "Close/uninstall ISO image", "查找": "To find the", "保存到 wine 容器中": "Save the wine containers", "设置 wine 容器": "Set up the wine containers", "查找DLL\n(为空则代表不查找,\n将显示全部内容):": "Find the DLL\n(null represents not find,\nWill show all content) :", "提示:\n 目前本提取功能暂只支持 NT 内核系统的官方安装镜像,不支持读取 ghost 等第三方封装方式的安装镜像\n 以及不要拷贝/替换太多的 dll,否则可能会导致 wine 容器异常,以及不要替换 Wine 的核心 dll\n 最后,拷贝/替换 dll 后,建议点击下面“设置 wine 容器”按钮==》函数库 进行设置\n当前选择的 Wine 容器:/home/gfdgd_xi/.wine": "Tip:\nCurrently used to extract features of this temporary support only official installation image, NT kernel system does not support read ghost third party packaging approaches such as the installation image\nAnd don't copy/replace the DLL too much, otherwise it may cause the wine vessel abnormalities, and not to replace the wine at the core of the DLL\nFinally, after copy/replace the DLL, it is recommended that the click \"Settings\" wine containers below button = = \"function library to set\nThe currently selected Wine container: / home/gfdgd_xi /. Wine", "常见 Linux 发行版": "Common Linux distributions", "

提示:

\n1、使用终端运行该程序,可以看到 wine 以及程序本身的提示和报错;\n2、wine 32 位和 64 位的容器互不兼容;\n3、所有的 wine 和 winetricks 均需要自行安装(可以从 菜单栏=>程序 里面进行安装);\n4、本程序支持带参数运行 wine 程序(之前版本也可以),只需要按以下格式即可:\nexe路径' 参数 '\n即可(单引号需要输入);\n5、wine 容器如果没有指定,则会默认为 ~/.wine;\n6、如果可执行文件比较大的话,会出现点击“获取该程序运行情况”出现假死的情况,因为正在后台读取 SHA1,只需要等一下即可(读取速度依照您电脑处理速度、读写速度、可执行文件大小等有关);\n7、对于非 X86 的用户来说,请不要使用本程序自带的 Wine 安装程序和 Windows 虚拟机安装功能(检测到为非 X86 架构会自动禁用);\n8、如果非 X86 的用户的 UOS 专业版用户想要使用的话,只需要在应用商店安装一个 Wine 版本微信即可在本程序选择正确的 Wine 运行程序;\n9、在使用 linglong 包的 Wine 应用时,必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项,\n而程序识别到的 Wine 是按 linglong 的使用 Wine 软件包名的字母排序第一个的 Wine,且生成的容器不在用户目录下,而是在容器的用户目录下(~/.deepinwine、/tmp、桌面、下载、文档等被映射的目录除外),\n同理需要运行的 EXE 也必须在被映射的目录内;\n10、如果是使用 Deepin 23 的 Wine 安装脚本,请切记——安装过程会临时添加 Deepin 20 的 apt 源,不要中断安装以及\n千万不要中断后不删除源的情况下 apt upgrade !!!中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine(会自动执行恢复操作)即可\n以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示;\nN: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。": "< h4 > tip: < / h4 >\n1, use terminal run the program, you can see wine as well as the program itself hints and error;\n2, wine containers of 32-bit and 64 - bit incompatible;\n3, need to install in all types of wine and winetricks (available from the menu bar = > application for installation);\n4, a parameter with this program run wine program (previous version), you just need to in the following format:\nExe path 'parameters'\n(single quotes need to input);\n5, wine containers if not specified, will default to ~ /. Wine;\n6, if the executable file is large, there will be a click on the \"get the program running situation\" suspended animation, because reading SHA1 backstage, you just need to wait (read speed according to your computer processing speed, to read and write speed and the executable file size, etc).\n7, for non-x86 user, please do not use this program with the Wine of the installer and install Windows virtual machine function (detected for the X86 architecture will be automatically disabled);\n8, if users of non-x86 UOS pro users want to use, only need to install a Wine in the app store version WeChat can choose the right Wine in the this program to run the program;\nSeptember and, when it is applied in Wine of linglong package must be installed at least one linglong using this option, Wine package will start\nAnd procedures to identify the Wine is according to the use of linglong Wine package name alphabetical order the first Wine, and generate the container is not in the user directory, but the user directory in the container (~ /. Deepinwine, / TMP, desktop, download, and document except mapped directory).\nSimilarly need to run the EXE also must be mapped directory;\n10, if is to use Deepin 23 Wine install script, please bear in mind - the installation process will temporarily add Deepin 20 apt source, installation and don't interrupt\nDon't delete after < b > don't interrupt source under the condition of apt upgrade!!!!!!\nAnd 100% can use this script installed Wine cannot be guaranteed, and the side effect is prompt;\n< code > N: since the warehouse 'https://community-packages.deepin.com/beige beige InRelease' does not support 'i386 architecture, skip the configuration file' main/binary - i386 / Packages' acquisition.", "※1、支持使用 Qemu + Chroot 跨运行 Wine 以及指定程序的功能;\n※2、提供了简易打包器以用于打包简易 deb;\n※3、支持下载配置过的 Qemu + Chroot 容器;\n※4、支持解压指定 deb 的内打包好的容器;\n5、优化 Wine 列表显示;\n6、优化非基于生态适配脚本的打包器内容自动填充功能;\n7、新增程序论坛和教程入口;\n8、优化程序文案\n": "※ 1 support using Qemu + Chroot run across the Wine and the function of the designated procedures;\n※ 2 provides a simple packaging machine for packaging simple deb;\n※ 3 support download Qemu + Chroot container configuration before;\n※ 4 support decompression specified deb packed in containers;\n5, optimization of Wine list;\n6, an optimization based on the ecological adaptation that pack the script content automatically filled function;\n7, new procedures BBS and tutorial entry;\n8, optimization of procedure document", "确定": "determine", "

Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序,内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。

\n

它同时还内置了基于VirtualBox制作的、专供小白使用的Windows虚拟机安装工具,可以做到只需下载系统镜像并点击安装即可,无需考虑虚拟机的安装、创建、分区等操作。

\n
\n\n一个图形化了如下命令的程序(最简单格式)\nenv WINEPREFIX=容器路径 wine(wine的路径) 可执行文件路径\n让你可以简易方便的使用 wine": "< p > Wine runner is a could make Linux users more convenient to run Windows application program, with built-in support for Wine graphical, all kinds of Wine packaging tools, homemade Wine program and runtime installation tools, etc.\n< p > it also has a built-in based on VirtualBox, meant for use by small white Windows virtual machine installation tools, can simply download the system image and click install, do not need to consider the installation of the virtual machine, such as creating, partition operation.\n
\nA graphical the program of the following commands (the simplest format)\n< code > env WINEPREFIX = wine container path (path) of wine executable file path < / code >\nLet the wine you can easy to use", "简易使用教程": "Simple to use the tutorial", "打包教程": "Packaging tutorial", "※1、支持使用 Qemu + Chroot 跨运行 Wine 以及指定程序的功能;\n※2、提供了简易打包器以用于打包简易 deb;\n※3、支持下载配置过的 Qemu + Chroot 容器;\n※4、支持解压指定 deb 的内打包好的容器;\n5、优化 Wine 列表显示;\n6、优化非基于生态适配脚本的打包器内容自动填充功能;\n7、新增程序论坛和教程入口;\n8、优化程序文案;\n9、新增日志翻译功能;\n10、程序进一步完善英语翻译(机翻);\n11、优化程序更新策略;\n": "※ 1 support using Qemu + Chroot run across the Wine and the function of the designated procedures;\n※ 2 provides a simple packaging machine for packaging simple deb;\n※ 3 support download Qemu + Chroot container configuration before;\n※ 4 support decompression specified deb packed in containers;\n5, optimization of Wine list;\n6, an optimization based on the ecological adaptation that pack the script content automatically filled function;\n7, new procedures BBS and tutorial entry;\n8, optimization copywriting program;\n9, new log function;\n10, program, we will further improve the English translation (machine);\n11, optimization program update strategy;", "更新(更新后需要自行手动重启程序)": "Need to manually restart the program after update (update)", "检查更新": "Check the update", "※1、支持使用 Qemu + Chroot 跨运行 Wine 以及指定程序的功能;\n※2、提供了简易打包器以用于打包简易 deb;\n※3、支持下载配置过的 Qemu + Chroot 容器;\n※4、支持解压指定 deb 的内打包好的容器;\n※5、优化 Wine 列表显示;\n※6、新增程序论坛和教程入口;\n7、优化非基于生态适配脚本的打包器内容自动填充功能;\n8、优化程序文案;\n9、新增日志翻译功能;\n10、程序进一步完善英语翻译(机翻);\n11、优化程序更新策略;\n12、新增程序评分功能。\n": "※ 1 support using Qemu + Chroot run across the Wine and the function of the designated procedures;\n※ 2 provides a simple packaging machine for packaging simple deb;\n※ 3 support download Qemu + Chroot container configuration before;\n※ 4 support decompression specified deb packed in containers;\n※ 5 optimize Wine list;\n※ 6 new BBS and tutorial entrance program;\n7, an optimization based on ecological adaptation that pack the script content automatically filled function;\n8, optimization copywriting program;\n9, new log function;\n10, program, we will further improve the English translation (machine);\n11, optimization program update strategy;\n12, new scoring function.", "程序评分": "Program ratings", "※1、支持使用 Qemu + Chroot 跨运行 Wine 以及指定程序的功能;\n※2、提供了简易打包器以用于打包简易 deb;\n※3、支持下载配置过的 Qemu + Chroot 容器;\n※4、支持解压指定 deb 的内打包好的容器;\n※5、优化 Wine 列表显示;\n※6、新增程序论坛和教程入口;\n7、优化非基于生态适配脚本的打包器内容自动填充功能;\n8、优化程序文案;\n9、新增日志翻译功能;\n10、程序进一步完善英语翻译(机翻);\n11、优化程序更新策略;\n12、优化日志分析功能;\n13、新增程序评分功能。\n": "※ 1 support using Qemu + Chroot run across the Wine and the function of the designated procedures;\n※ 2 provides a simple packaging machine for packaging simple deb;\n※ 3 support download Qemu + Chroot container configuration before;\n※ 4 support decompression specified deb packed in containers;\n※ 5 optimize Wine list;\n※ 6 new BBS and tutorial entrance program;\n7, an optimization based on ecological adaptation that pack the script content automatically filled function;\n8, optimization copywriting program;\n9, new log function;\n10, program, we will further improve the English translation (machine);\n11, optimization program update strategy;\n12, optimization of log analysis function;\n13, the new scoring function.", "获取程序公告": "Access to program announcement", "※1、支持使用 Qemu + Chroot 跨运行 Wine 以及指定程序的功能;\n※2、提供了简易打包器以用于打包简易 deb;\n※3、支持下载配置过的 Qemu + Chroot 容器;\n※4、支持在隔离的 Chroot 容器内运行 Wine;\n※5、支持解压指定 deb 的内打包好的容器;\n※6、优化 Wine 列表显示;\n※7、新增程序论坛和教程入口;\n※8、程序公告功能;\n※9、新增程序评分功能;\n※10、新增解包 deb 内 Wine 容器功能;\n※11、新增 Vkd3d Proton 安装功能,更新 dxvk 版本至 2.0.0;\n※12、新增程序菜单栏部分栏目图标;\n13、优化非基于生态适配脚本的打包器内容自动填充功能;\n14、优化程序文案;\n15、新增日志翻译功能;\n16、程序进一步完善英语翻译(机翻);\n17、优化程序更新策略;\n18、优化日志分析功能;\n19、优化程序 UI。": "※ 1 support using Qemu + Chroot run across the Wine and the function of the designated procedures;\n※ 2 provides a simple packaging machine for packaging simple deb;\n※ 3 support download Qemu + Chroot container configuration before;\n※ 4 support running in isolated Chroot container Wine;\n※ 5 support decompression specified deb packed in containers;\n※ 6 optimize Wine list;\n※ 7 new BBS and tutorial entrance program;\n※ 8 program announcement function;\n※ 9 new program grading function;\n※ 10 new unpacking deb Wine containers within the function;\n※ 11 new Vkd3d Proton installation function, update DXVK version to 2.0.0;\n※ 12 new program menu bar section column icon;\n13, an optimization based on the ecological adaptation that pack the script content automatically filled function;\n14, optimization copywriting program;\n15, new log function;\n16, program, we will further improve the English translation (machine);\n17, optimization program update strategy;\n18, optimization of log analysis function;\n19, optimization program UI.", "快捷方式管理工具": "Shortcut management tools", "run_v3.sh 管理": "Run_v3. Sh management", "安装/卸载 Vkd3d": "Install/uninstall Vkd3d", "安装 Vkd3d": "Install Vkd3d", "卸载 Vkd3d": "Uninstall Vkd3d", "启用/禁止指定 wine 容器生成快捷方式": "Enable/designated wine containers generated shortcut is prohibited", "启用/禁止指定 wine 容器创建文件关联": "Enable/designated wine containers to create file associations is prohibited", "允许指定 wine 容器创建文件关联": "Allows you to specify wine containers to create file associations", "禁止指定 wine 容器创建文件关联": "Designated wine containers to create file associations is prohibited", "※1、不基于生态适配脚本打包器支持禁用 Mono/Gecko 打包器;\n※2、自动容器配置脚本新增命令 decompressionbottle、programforum、installmsi 以及上述命令的帮助;\n※3、自动容器配置脚本新增评论功能;\n※4、自动容器配置脚本新增许多应用安装脚本;\n※5、安装 Windows 虚拟机功能更换应答镜像图标并添加常用 Windows 组件安装功能;\n※6、安装 Windows 虚拟机功能提供镜像下载的网盘链接;\n※7、简易打包器支持自动添加宋体;\n8、修复 installfont 命令下载的字体目录错误问题;\n9、修复提交日志功能在提交成功时依旧提示提交失败问题;\n10、支持强制启用所有被禁用的组件(不推荐)。\n": "※ 1 is not based on the ecological adaptation that packaging script support disabled Mono/Gecko packaging;\n※ 2 automatic container configuration script command new decompressionbottle, programforum, installmsi and the help of the above command;\n※ 3 container configuration script automatically add comments;\n※ 4 automatic container configuration script increased many application installation script;\n※ may install Windows virtual machine function change response mirror icon and add commonly used Windows component installation function;\n※ 6 install Windows virtual machine provides network backup image download links;\n※ 7 simple packaging machine support automatically add song typeface.\n8, repair installfont command to download the font directory error problem;\n9, repair the commit log function in submit success still prompt submit failure problem;\n10, support force enable all disabled components (not recommended).", "强制启用所有被禁用的组件(不推荐)": "Forced to enable all disabled components (not recommended)", "鸣谢名单": "Thanks to the list", "此为最新版本,无需更新": "This is the latest version, do not need to update", "※1、Windows 应用适配工具新增系统资源显示;\n※2、修复打包器(基于官方生态适配脚本)无法打开的问题;\n※3、新增运行库功能安装,以实现使用 Qemu User 跨架构运行 Wine 的功能;\n※4、修复 Chroot 容器的一些问题;\n※5、修复在 Debian11 安装时缺失依赖 rar 的问题;\n※6、新增安装 box86、box64 的功能;\n7、修改程序内的部分网址;\n8、作者信息变更;\n": "※ 1 new system resources display Windows application adapter tools;\n※ 2 repair packaging machine (official script) ecological adaptation based unable to open the problem;\n※ 3 new runtime features installed, in order to realize the use Qemu User across architecture operation function of Wine;\nDoes 4 problems, repair the Chroot containers.\n※ 5 repair when Debian11 installed on missing rar problem;\n※ 6, new installation box86 box64 function;\nPart of the site within seven, modify the program;\n8, the author information changes;", "运行库": "The runtime", "安装 Qemu User": "Install Qemu User", "运行库 s390x": "The runtime s390x", "运行库 amd64": "The runtime amd64", "运行库 arm64": "The runtime arm64", "运行库 armhf": "The runtime armhf", "运行库 ppc64el": "The runtime ppc64el", "运行库 i386": "The runtime i386", "运行库 riscv64": "The runtime riscv64", "运行库 mips64el": "The runtime mips64el", "※1、Windows 应用适配工具新增系统资源显示;\n※2、修复打包器(基于官方生态适配脚本)无法打开的问题;\n※3、新增运行库功能安装,以实现使用 Qemu User 跨架构运行 Wine 的功能;\n※4、修复 Chroot 容器的一些问题;\n※5、修复在 Debian11 安装时缺失依赖 rar 的问题;\n※6、新增安装 box86、box64 的功能;\n7、修改程序内的部分网址;\n8、作者信息变更;\n9、支持禁用程序的多语言支持(默认禁用,因为是机翻的);\n10、支持在程序本地翻译缺失的情况下自动机翻缺失语句;\n": "※ 1 new system resources display Windows application adapter tools;\n※ 2 repair packaging machine (official script) ecological adaptation based unable to open the problem;\n※ 3 new runtime features installed, in order to realize the use Qemu User across architecture operation function of Wine;\nDoes 4 problems, repair the Chroot containers.\n※ 5 repair when Debian11 installed on missing rar problem;\n※ 6, new installation box86 box64 function;\nPart of the site within seven, modify the program;\n8, the author information changes;\n9, support multiple language support to disable the program (disabled by default, because it is a machine);\n10, lack of support in the application of local translation of automata over missing statement;", "※1、Windows 应用适配工具新增系统资源显示;\n※2、修复打包器(基于官方生态适配脚本)无法打开的问题;\n※3、新增运行库功能安装,以实现使用 Qemu User 跨架构运行 Wine 的功能;\n※4、修复 Chroot 容器的一些问题;\n※5、修复在 Debian11 安装时缺失依赖 rar 的问题;\n※6、新增安装 box86、box64 的功能;\n7、修改程序内的部分网址;\n8、作者信息变更;\n9、支持禁用程序的多语言支持(默认禁用,因为是机翻的);\n10、支持在程序本地翻译缺失的情况下自动机翻缺失语句;\n11、从此版本开始不再区分吾爱版、Spark 版和 UOS 版\n": "※ 1 new system resources display Windows application adapter tools;\n※ 2 repair packaging machine (official script) ecological adaptation based unable to open the problem;\n※ 3 new runtime features installed, in order to realize the use Qemu User across architecture operation function of Wine;\nDoes 4 problems, repair the Chroot containers.\n※ 5 repair when Debian11 installed on missing rar problem;\n※ 6, new installation box86 box64 function;\nPart of the site within seven, modify the program;\n8, the author information changes;\n9, support multiple language support to disable the program (disabled by default, because it is a machine);\n10, lack of support in the application of local translation of automata over missing statement;\n11, the beginning of a version no longer distinguish between my love edition version, Spark and UOS edition", "安装 Box86": "Install Box86", "安装 s390x 运行库": "Install s390x runtime", "卸载 s390x 运行库": "Uninstall s390x runtime", "安装 amd64 运行库": "Install the amd64 runtime", "卸载 amd64 运行库": "Uninstall amd64 runtime", "安装 arm64 运行库": "Install arm64 runtime", "卸载 arm64 运行库": "Uninstall arm64 runtime", "安装 armhf 运行库": "Install armhf runtime", "卸载 armhf 运行库": "Uninstall armhf runtime", "安装 ppc64el 运行库": "Install ppc64el runtime", "卸载 ppc64el 运行库": "Uninstall ppc64el runtime", "安装 i386 运行库": "Install i386 runtime", "卸载 i386 运行库": "Uninstall i386 runtime", "安装 riscv64 运行库": "Install riscv64 runtime", "卸载 riscv64 运行库": "Uninstall riscv64 runtime", "安装 mips64el 运行库": "Install mips64el runtime", "卸载 mips64el 运行库": "Uninstall mips64el runtime", "Qemu + Chroot 挂载用户目录:": "Qemu + Chroot mount user directory:", "程序翻译:": "Program translation:", "自动根据文件名生成容器路径(开启后必须通过修改默认wine容器路径才可指定其它路径,重启程序后生效)": "Automatic container path was generated according to the file name (open must by modifying the default after wine container path to specify other paths, to take effect after a restart the program)", "使用 Qemu + Chroot 时不挂载用户目录并与系统隔离(修改后重启操作系统生效)": "Don't mount when using Qemu + Chroot user directory and from the system (modified restart your operating system)", "禁用程序界面翻译": "To disable the program interface translation"}
\ No newline at end of file
diff --git a/deb/opt/apps/deepin-wine-runner/updatekiller.py b/deb/opt/apps/deepin-wine-runner/updatekiller.py
deleted file mode 100755
index 0b280c0..0000000
--- a/deb/opt/apps/deepin-wine-runner/updatekiller.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python3
-import sys
-import os
-import atexit
-
-PIDFILE = '/tmp/deepin-wine-runner.pid'
-
-#程序结束时清理pid
-@atexit.register
-def remove_pid():
-    with open(PIDFILE) as pidfile:
-        pidlst = pidfile.readlines()
-    pidlst.remove(str(PID)+'\n')
-    with open(PIDFILE,'w') as pidfile:
-        pidfile.writelines(pidlst)
-
-#更新时结束进程
-def main():
-    for i in open(PIDFILE):
-        try:
-            os.kill(int(i),15)
-        except ProcessLookupError:
-            pass
-    os.remove(PIDFILE)
-
-#当该程序被直接执行时,执行结束进程操作。如果是导入的形式,则只是记录pid
-if __name__ == '__main__':
-    sys.exit(main())
-else:
-    #获取进程pid,用于更新时结束进程
-    PID = os.getpid()
-    with open(PIDFILE,'a') as pidfile:
-        print(PID,file=pidfile) #使用print可以在行末输出换行符,而且可以省去类型转换
diff --git a/deb/opt/apps/deepin-wine-runner/vkd3d-proton.7z b/deb/opt/apps/deepin-wine-runner/vkd3d-proton.7z
deleted file mode 100644
index a9cde62..0000000
Binary files a/deb/opt/apps/deepin-wine-runner/vkd3d-proton.7z and /dev/null differ
diff --git a/deb/opt/apps/deepin-wine-runner/wine install b/deb/opt/apps/deepin-wine-runner/wine install
deleted file mode 100755
index 0043f9a..0000000
--- a/deb/opt/apps/deepin-wine-runner/wine install	
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python3
-# 使用系统默认的 python3 运行
-###########################################################################################
-# 作者:gfdgd xi
-# 版本:2.0.1
-# 更新时间:2022年07月08日
-# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
-# 基于 Python3 的 tkinter 构建
-###########################################################################################
-#################
-# 引入所需的库
-#################
-import os
-
-###################
-# 程序功能
-###################
-print('''                            
-m     m   "                 
-#  #  # mmm    m mm    mmm  
-" #"# #   #    #"  #  #"  # 
- ## ##"   #    #   #  #"""" 
- #   #  mm#mm  #   #  "#mm" 
-                            
-                            
-''')
-print("请保证你能有 root 权限以便安装")
-print("如果有请按回车,否则按 [Ctrl+C] 退出", end=' ')
-input()
-os.system("sudo apt update")
-print("请问是否要更新操作系统?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    os.system("sudo apt upgrade -y")
-print("请问是否要安装原版 wine(wine64)?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    os.system("sudo apt install wine -y")
-print("请问是否要安装 deepin-wine?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    os.system("sudo apt install deepin-wine -y")
-print("请问是否要安装 deepin-wine5(需要添加星火应用商店的源)?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    if os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
-        os.system("sudo apt install deepin-wine5 -y")
-    os.system("sudo touch /etc/apt/sources.list.d/sparkstore.list")
-    os.system("echo 'deb [by-hash=force] https://d.store.deepinos.org.cn/ /' | sudo tee '/etc/apt/sources.list.d/sparkstore.list'")
-    os.system("mkdir -p /tmp/spark-store-install")
-    os.system("wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc")
-    os.system("cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg")
-    os.system("apt update -o Dir::Etc::sourcelist=\"sources.list.d/sparkstore.list\"     -o Dir::Etc::sourceparts=\"-\" -o APT::Get::List-Cleanup=\"0\"")
-    os.system("sudo apt update")
-    os.system("sudo apt install deepin-wine5 -y")
-print("请问是否要安装 deepin-wine5-stable?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    os.system("sudo apt install deepin-wine5-stable -y")
-print("请问是否要安装 deepin-wine6-stable?[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    os.system("sudo apt install deepin-wine6-stable -y")
-print("请问是否要安装 spark-wine7-devel?(需要添加星火应用商店的源)[Y/N]", end=' ')
-choose = input().upper()
-if not choose == "N":
-    if os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
-        os.system("sudo apt install spark-wine7-devel -y")
-    os.system("sudo touch /etc/apt/sources.list.d/sparkstore.list")
-    os.system("echo 'deb [by-hash=force] https://d.store.deepinos.org.cn/ /' | sudo tee '/etc/apt/sources.list.d/sparkstore.list'")
-    os.system("mkdir -p /tmp/spark-store-install")
-    os.system("wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc")
-    os.system("cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg")
-    os.system("apt update -o Dir::Etc::sourcelist=\"sources.list.d/sparkstore.list\"     -o Dir::Etc::sourceparts=\"-\" -o APT::Get::List-Cleanup=\"0\"")
-    os.system("sudo apt update")
-    os.system("sudo apt install spark-wine7-devel -y")
-print("全部完成!")
\ No newline at end of file
diff --git a/deb/opt/apps/deepin-wine-runner/wine/.qmake.stash b/deb/opt/apps/deepin-wine-runner/wine/.qmake.stash
deleted file mode 100755
index 6cab99c..0000000
--- a/deb/opt/apps/deepin-wine-runner/wine/.qmake.stash
+++ /dev/null
@@ -1,24 +0,0 @@
-QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
-QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 8
-QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
-QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
-QMAKE_CXX.COMPILER_MACROS = \
-    QT_COMPILER_STDCXX \
-    QMAKE_GCC_MAJOR_VERSION \
-    QMAKE_GCC_MINOR_VERSION \
-    QMAKE_GCC_PATCH_VERSION
-QMAKE_CXX.INCDIRS = \
-    /usr/include/c++/8 \
-    /usr/include/x86_64-linux-gnu/c++/8 \
-    /usr/include/c++/8/backward \
-    /usr/lib/gcc/x86_64-linux-gnu/8/include \
-    /usr/local/include \
-    /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed \
-    /usr/include/x86_64-linux-gnu \
-    /usr/include
-QMAKE_CXX.LIBDIRS = \
-    /usr/lib/gcc/x86_64-linux-gnu/8 \
-    /usr/lib/x86_64-linux-gnu \
-    /usr/lib \
-    /lib/x86_64-linux-gnu \
-    /lib
diff --git a/deb/opt/apps/deepin-wine-runner/wine/Makefile b/deb/opt/apps/deepin-wine-runner/wine/Makefile
deleted file mode 100755
index fa2bc21..0000000
--- a/deb/opt/apps/deepin-wine-runner/wine/Makefile
+++ /dev/null
@@ -1,505 +0,0 @@
-#############################################################################
-# Makefile for building: installwine
-# Generated by qmake (3.1) (Qt 5.15.3)
-# Project:  ../wine-source/wineinstall.pro
-# Template: app
-# Command: /usr/lib/qt5/bin/qmake -o Makefile ../wine-source/wineinstall.pro
-#############################################################################
-
-MAKEFILE      = Makefile
-
-EQ            = =
-
-####### Compiler, tools and options
-
-CC            = gcc
-CXX           = g++
-DEFINES       = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
-CFLAGS        = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
-CXXFLAGS      = -pipe -O2 -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
-INCPATH       = -I../wine-source -I. -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++
-QMAKE         = /usr/lib/qt5/bin/qmake
-DEL_FILE      = rm -f
-CHK_DIR_EXISTS= test -d
-MKDIR         = mkdir -p
-COPY          = cp -f
-COPY_FILE     = cp -f
-COPY_DIR      = cp -f -R
-INSTALL_FILE  = install -m 644 -p
-INSTALL_PROGRAM = install -m 755 -p
-INSTALL_DIR   = cp -f -R
-QINSTALL      = /usr/lib/qt5/bin/qmake -install qinstall
-QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe
-DEL_FILE      = rm -f
-SYMLINK       = ln -f -s
-DEL_DIR       = rmdir
-MOVE          = mv -f
-TAR           = tar -cf
-COMPRESS      = gzip -9f
-DISTNAME      = installwine1.0.0
-DISTDIR = /home/gfdgd_xi/Desktop/deep-wine-runner/wine/.tmp/installwine1.0.0
-LINK          = g++
-LFLAGS        = -Wl,-O1
-LIBS          = $(SUBLIBS) /usr/lib/x86_64-linux-gnu/libQt5Widgets.so /usr/lib/x86_64-linux-gnu/libQt5Gui.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lGL -lpthread   
-AR            = ar cqs
-RANLIB        = 
-SED           = sed
-STRIP         = strip
-
-####### Output directory
-
-OBJECTS_DIR   = ./
-
-####### Files
-
-SOURCES       = ../wine-source/main.cpp \
-		../wine-source/mainwindow.cpp \
-		../wine-source/downloadthread.cpp moc_mainwindow.cpp \
-		moc_downloadthread.cpp
-OBJECTS       = main.o \
-		mainwindow.o \
-		downloadthread.o \
-		moc_mainwindow.o \
-		moc_downloadthread.o
-DIST          = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkit.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkitwidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
-		../wine-source/.qmake.stash \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
-		../wine-source/wineinstall.pro ../wine-source/mainwindow.h \
-		../wine-source/downloadthread.h ../wine-source/main.cpp \
-		../wine-source/mainwindow.cpp \
-		../wine-source/downloadthread.cpp
-QMAKE_TARGET  = installwine
-DESTDIR       = 
-TARGET        = installwine
-
-
-first: all
-####### Build rules
-
-installwine: ui_mainwindow.h $(OBJECTS)  
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
-
-Makefile: ../wine-source/wineinstall.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkit.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkitwidgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
-		.qmake.stash \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
-		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
-		../wine-source/wineinstall.pro
-	$(QMAKE) -o Makefile ../wine-source/wineinstall.pro
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkit.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webkitwidgets.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf:
-.qmake.stash:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf:
-/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf:
-../wine-source/wineinstall.pro:
-qmake: FORCE
-	@$(QMAKE) -o Makefile ../wine-source/wineinstall.pro
-
-qmake_all: FORCE
-
-
-all: Makefile installwine
-
-dist: distdir FORCE
-	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
-
-distdir: FORCE
-	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
-	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
-	$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/
-	$(COPY_FILE) --parents ../wine-source/mainwindow.h ../wine-source/downloadthread.h $(DISTDIR)/
-	$(COPY_FILE) --parents ../wine-source/main.cpp ../wine-source/mainwindow.cpp ../wine-source/downloadthread.cpp $(DISTDIR)/
-	$(COPY_FILE) --parents ../wine-source/mainwindow.ui $(DISTDIR)/
-
-
-clean: compiler_clean 
-	-$(DEL_FILE) $(OBJECTS)
-	-$(DEL_FILE) *~ core *.core
-
-
-distclean: clean 
-	-$(DEL_FILE) $(TARGET) 
-	-$(DEL_FILE) .qmake.stash
-	-$(DEL_FILE) Makefile
-
-
-####### Sub-libraries
-
-mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean
-
-mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all
-
-check: first
-
-benchmark: first
-
-compiler_rcc_make_all:
-compiler_rcc_clean:
-compiler_moc_predefs_make_all: moc_predefs.h
-compiler_moc_predefs_clean:
-	-$(DEL_FILE) moc_predefs.h
-moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
-	g++ -pipe -O2 -std=gnu++11 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
-
-compiler_moc_header_make_all: moc_mainwindow.cpp moc_downloadthread.cpp
-compiler_moc_header_clean:
-	-$(DEL_FILE) moc_mainwindow.cpp moc_downloadthread.cpp
-moc_mainwindow.cpp: ../wine-source/mainwindow.h \
-		moc_predefs.h \
-		/usr/lib/qt5/bin/moc
-	/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/wine/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/wine-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include ../wine-source/mainwindow.h -o moc_mainwindow.cpp
-
-moc_downloadthread.cpp: ../wine-source/downloadthread.h \
-		moc_predefs.h \
-		/usr/lib/qt5/bin/moc
-	/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/wine/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/wine-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include ../wine-source/downloadthread.h -o moc_downloadthread.cpp
-
-compiler_moc_objc_header_make_all:
-compiler_moc_objc_header_clean:
-compiler_moc_source_make_all:
-compiler_moc_source_clean:
-compiler_uic_make_all: ui_mainwindow.h
-compiler_uic_clean:
-	-$(DEL_FILE) ui_mainwindow.h
-ui_mainwindow.h: ../wine-source/mainwindow.ui \
-		/usr/lib/qt5/bin/uic
-	/usr/lib/qt5/bin/uic ../wine-source/mainwindow.ui -o ui_mainwindow.h
-
-compiler_yacc_decl_make_all:
-compiler_yacc_decl_clean:
-compiler_yacc_impl_make_all:
-compiler_yacc_impl_clean:
-compiler_lex_make_all:
-compiler_lex_clean:
-compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean 
-
-####### Compile
-
-main.o: ../wine-source/main.cpp ../wine-source/mainwindow.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../wine-source/main.cpp
-
-mainwindow.o: ../wine-source/mainwindow.cpp ../wine-source/mainwindow.h \
-		ui_mainwindow.h \
-		../wine-source/downloadthread.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o ../wine-source/mainwindow.cpp
-
-downloadthread.o: ../wine-source/downloadthread.cpp ../wine-source/downloadthread.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o downloadthread.o ../wine-source/downloadthread.cpp
-
-moc_mainwindow.o: moc_mainwindow.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
-
-moc_downloadthread.o: moc_downloadthread.cpp 
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_downloadthread.o moc_downloadthread.cpp
-
-####### Install
-
-install_target: first FORCE
-	@test -d $(INSTALL_ROOT)/opt/installwine/bin || mkdir -p $(INSTALL_ROOT)/opt/installwine/bin
-	$(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/installwine/bin/$(QMAKE_TARGET)
-	-$(STRIP) $(INSTALL_ROOT)/opt/installwine/bin/$(QMAKE_TARGET)
-
-uninstall_target: FORCE
-	-$(DEL_FILE) $(INSTALL_ROOT)/opt/installwine/bin/$(QMAKE_TARGET)
-	-$(DEL_DIR) $(INSTALL_ROOT)/opt/installwine/bin/ 
-
-
-install: install_target  FORCE
-
-uninstall: uninstall_target  FORCE
-
-FORCE:
-
diff --git a/deb/opt/apps/deepin-wine-runner/wine/installwine b/deb/opt/apps/deepin-wine-runner/wine/installwine
deleted file mode 100755
index 5025205..0000000
--- a/deb/opt/apps/deepin-wine-runner/wine/installwine
+++ /dev/null
@@ -1,394 +0,0 @@
-#!/usr/bin/env python3
-# 本来是用C++写的,但在非deepin/UOS编译/运行就是下载不了https文件,只能用python重写
-#########################################################################
-# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布
-# 版本:2.4.0
-# 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序
-# 基于 Python3 的 PyQt5 构建
-#########################################################################
-#################
-# 引入所需的库
-#################
-import os
-import shutil
-import random
-import sys
-import json
-import traceback
-import requests
-programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
-sys.path.append(f"{programPath}/../")
-from Model import *
-from PyQt5 import QtCore, QtGui, QtWidgets
-programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
-# UI 布局(自动生成)
-class Ui_MainWindow(object):
-    def setupUi(self, MainWindow):
-        MainWindow.setObjectName("MainWindow")
-        MainWindow.resize(693, 404)
-        self.centralWidget = QtWidgets.QWidget(MainWindow)
-        self.centralWidget.setObjectName("centralWidget")
-        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralWidget)
-        self.verticalLayout_2.setContentsMargins(11, 11, 11, 11)
-        self.verticalLayout_2.setSpacing(6)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
-        self.horizontalLayout_2.setSpacing(6)
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.localWineList = QtWidgets.QListView(self.centralWidget)
-        self.localWineList.setObjectName("localWineList")
-        self.horizontalLayout_2.addWidget(self.localWineList)
-        self.verticalLayout = QtWidgets.QVBoxLayout()
-        self.verticalLayout.setSpacing(6)
-        self.verticalLayout.setObjectName("verticalLayout")
-        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
-        self.verticalLayout.addItem(spacerItem)
-        self.addButton = QtWidgets.QPushButton(self.centralWidget)
-        self.addButton.setObjectName("addButton")
-        self.verticalLayout.addWidget(self.addButton)
-        self.delButton = QtWidgets.QPushButton(self.centralWidget)
-        self.delButton.setObjectName("delButton")
-        self.verticalLayout.addWidget(self.delButton)
-        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
-        self.verticalLayout.addItem(spacerItem1)
-        self.horizontalLayout_2.addLayout(self.verticalLayout)
-        self.internetWineList = QtWidgets.QListView(self.centralWidget)
-        self.internetWineList.setObjectName("internetWineList")
-        self.horizontalLayout_2.addWidget(self.internetWineList)
-        self.verticalLayout_2.addLayout(self.horizontalLayout_2)
-        self.horizontalLayout = QtWidgets.QHBoxLayout()
-        self.horizontalLayout.setSpacing(6)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.unzip = QtWidgets.QCheckBox(self.centralWidget)
-        self.unzip.setObjectName("unzip")
-        self.horizontalLayout.addWidget(self.unzip)
-        self.deleteZip = QtWidgets.QCheckBox(self.centralWidget)
-        self.deleteZip.setChecked(True)
-        self.deleteZip.setTristate(False)
-        self.deleteZip.setObjectName("deleteZip")
-        self.horizontalLayout.addWidget(self.deleteZip)
-        self.addOtherWine = QtWidgets.QPushButton(self.centralWidget)
-        self.horizontalLayout.addWidget(self.addOtherWine)
-        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem2)
-        self.verticalLayout_2.addLayout(self.horizontalLayout)
-        MainWindow.setCentralWidget(self.centralWidget)
-        # 菜单栏
-        _translate = QtCore.QCoreApplication.translate
-        self.menu = MainWindow.menuBar()
-        self.changeSources = self.menu.addMenu(_translate("MainWindow", "更换源"))
-        self.gitlinkAction = QtWidgets.QAction(_translate("MainWindow", "Gitlink 源(推荐)"))
-        self.kgithubAction = QtWidgets.QAction(_translate("MainWindow", "KGithub 源"))
-        self.ipv6Action = QtWidgets.QAction(_translate("MainWindow", "Github 源1(国内访问不稳定)"))
-        self.githubAction = QtWidgets.QAction(_translate("MainWindow", "Github 源2(国内访问不稳定)"))
-        
-        self.localAction = QtWidgets.QAction(_translate("MainWindow", "本地测试源(127.0.0.1)"))
-        self.changeSources.addAction(self.gitlinkAction)
-        self.changeSources.addAction(self.kgithubAction)
-        self.changeSources.addAction(self.ipv6Action)
-        self.changeSources.addAction(self.githubAction)
-        self.changeSources.addAction(self.localAction)
-        for i in [self.gitlinkAction, self.ipv6Action, self.localAction, self.kgithubAction, self.githubAction]:
-            i.setCheckable(True)
-        self.gitlinkAction.setChecked(True)
-        self.changeSourcesGroup = QtWidgets.QActionGroup(MainWindow)
-        self.changeSourcesGroup.addAction(self.gitlinkAction)
-        self.changeSourcesGroup.addAction(self.kgithubAction)
-        self.changeSourcesGroup.addAction(self.ipv6Action)
-        self.changeSourcesGroup.addAction(self.githubAction)
-        self.changeSourcesGroup.addAction(self.localAction)
-
-        self.retranslateUi(MainWindow)
-        QtCore.QMetaObject.connectSlotsByName(MainWindow)
-
-    def retranslateUi(self, MainWindow):
-        _translate = QtCore.QCoreApplication.translate
-        MainWindow.setWindowTitle(_translate("MainWindow", "下载 Wine"))
-        self.addButton.setText(_translate("MainWindow", "<<"))
-        self.delButton.setText(_translate("MainWindow", ">>"))
-        self.unzip.setText(_translate("MainWindow", "不解压Wine资源文件"))
-        self.deleteZip.setText(_translate("MainWindow", "删除下载的资源包,只解压保留(两个选项都选相互抵消)"))
-        self.addOtherWine.setText(_translate("MainWindow", "导入自己的Wine"))
-
-def ReadLocalInformation():
-    try:
-        global localJsonList
-        file = open(f"{programPath}/winelist.json", "r")
-        localJsonList = json.loads(file.read())
-        nmodel = QtGui.QStandardItemModel(window)
-        for i in localJsonList:
-            item = QtGui.QStandardItem(i)
-            nmodel.appendRow(item)
-        ui.localWineList.setModel(nmodel)
-        file.close()
-    except:
-        print("新建空列表")
-        try:
-            with open(f"{programPath}/winelist.json", "w") as file:
-                file.write("[]")
-        except:
-            traceback.print_exc()
-            QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
-
-def InstallOtherWine():
-    path = QtWidgets.QFileDialog.getOpenFileName(window, "选择 Wine", os.getenv("~"), "wine(wine);;wine64(wine64);;全部文件(*.*)")
-    if path[0] == "" or not path[1]:
-        return
-    try:
-        # 写入配置文件
-        rfile = open(f"{programPath}/winelist.json", "r")
-        list = json.loads(rfile.read())
-        rfile.close()
-        # 创建映射
-        name = os.path.basename(os.path.dirname(os.path.dirname(path[0])))
-        if name == "" or name == None:
-            name = f"useradd-wine-{random.randint(0, 99999)}"
-        #binPath = os.path.dirname(os.path.dirname(path[0]))
-        os.makedirs(f"{programPath}/{name}/bin")
-        if os.system(f"ln -s '{path[0]}' '{programPath}/{name}/bin/wine'") != 0:
-            QtWidgets.QMessageBox.critical(window, "新建wine映射失败")
-        # C++ 版注释:不直接用 readwrite 是因为不能覆盖写入
-        file = open(f"{programPath}/winelist.json", "w")
-        list.append(name)
-        file.write(json.dumps(list))
-        file.close()
-    except:
-        traceback.print_exc()
-        QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
-    ReadLocalInformation()
-
-def ChangeSources():
-    global urlSources
-    global internetWineSource
-    sources = [ui.gitlinkAction, ui.kgithubAction, ui.ipv6Action, ui.githubAction, ui.localAction]
-    for i in range(0, len(sources)):
-        if sources[i].isChecked():
-            urlSources = internetWineSourceList[i]
-            internetWineSource = internetWineSourceList[i]
-            # 读取信息
-            ReadLocalInformation()
-            ReadInternetInformation()
-            break
-    print(urlSources)
-
-# 下面内容均翻译自 C++ 版本
-def ReadInternetInformation():
-    global internetJsonList
-    # C++ 版本是用 curl 的,考虑到 Python 用 requests 反而方便,于是不用 curl
-    try:
-        internetJsonList = json.loads(requests.get(f"{internetWineSource}/information.json").text)
-    except:
-        traceback.print_exc()
-        QtWidgets.QMessageBox.critical(window, "错误", "无法连接服务器!")
-        return
-    nmodel = QtGui.QStandardItemModel(window)
-    for i in internetJsonList:
-        item = QtGui.QStandardItem(i[0])
-        nmodel.appendRow(item)
-    ui.internetWineList.setModel(nmodel)
-    
-class DownloadThread(QtCore.QThread):
-    MessageBoxInfo = QtCore.pyqtSignal(str)
-    MessageBoxError = QtCore.pyqtSignal(str)
-    ChangeDialog = QtCore.pyqtSignal(QtWidgets.QProgressDialog, int, int, int)
-    Finish = QtCore.pyqtSignal()
-    def __init__(self, progressDialog: QtWidgets.QProgressDialog, 
-        url: str, savePath: str, fileName: str, view: QtWidgets.QListView, deleteZip: bool, 
-        unzip: bool, localList) -> None:
-        self.dialog = progressDialog
-        self.fileUrl = url
-        self.fileSavePath = savePath
-        self.fileSaveName = fileName
-        self.localView = view
-        self.downloadDeleteZip = deleteZip
-        self.downloadUnzip = unzip
-        self.localJsonList = localList
-        super().__init__()
-
-    def ReadLocalInformation(self):
-        global localJsonList
-        try:
-            file = open(f"{programPath}/winelist.json", "r");
-            nmodel = QtGui.QStandardItemModel()
-            localJsonList = json.loads(file.read())
-            for i in localJsonList:
-                nmodel.appendRow(QtGui.QStandardItem(i))
-            self.localView.setModel(nmodel)
-            file.close()
-        except:
-            traceback.print_exc()
-            QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
-
-    def run(self):
-        try:
-            # 创建文件夹
-            dir = QtCore.QDir()
-            savePath = f"{programPath}/{self.fileSaveName}"
-            # 文件下载
-            timeout = 0
-            f = requests.get(self.fileUrl, stream=True)
-            allSize = int(f.headers["content-length"])  # 文件总大小
-            bytesRead = 0
-            with open(savePath, "wb") as filePart:
-                for chunk in f.iter_content(chunk_size=1024):
-                    if chunk:
-                        #progressbar.update(int(part / show))
-                        filePart.write(chunk)
-                        bytesRead += 1024
-                        self.ChangeDialog.emit(self.dialog, int(bytesRead / allSize * 100), int(bytesRead / 1024 / 1024), int(allSize / 1024 / 1024))
-            # 写入配置文件
-            rfile = open(f"{programPath}/winelist.json", "r")
-            list = json.loads(rfile.read())
-            rfile.close()
-            # C++ 版注释:不直接用 readwrite 是因为不能覆盖写入
-            file = open(f"{programPath}/winelist.json", "w")
-            list.append(self.fileSaveName.replace(".7z", ""))
-            file.write(json.dumps(list))
-            file.close()
-            # 读取配置文件
-            self.ReadLocalInformation()
-            self.localJsonList = list
-            # 解压文件
-            shellCommand = ""
-            if self.downloadUnzip:
-                path = f"{programPath}/{self.fileSaveName.replace('.7z', '')}"
-                shellCommand += f"""mkdir -p \"{path}\"
-7z x -y \"{savePath}\" -o\"{path}\"
-"""
-            if self.downloadDeleteZip:
-                shellCommand += f"rm -rf \"{savePath}\"\n"
-            shellFile = open("/tmp/depein-wine-runner-wine-install.sh", "w")
-            shellFile.write(shellCommand)
-            shellFile.close()
-            #process = QtCore.QProcess()
-            #command = ["deepin-terminal", "-e", "bash", "/tmp/depein-wine-runner-wine-install.sh"]
-            #process.start(f"{programPath}/../launch.sh", command)
-            #process.waitForFinished()
-            OpenTerminal("bash /tmp/depein-wine-runner-wine-install.sh")
-            self.Finish.emit()
-        except:
-            traceback.print_exc()
-            self.MessageBoxError.emit(traceback.format_exc())
-
-def MessageBoxInfo(info):
-    QtWidgets.QMessageBox.information(window, "提示", info)
-
-def MessageBoxError(info):
-    QtWidgets.QMessageBox.critical(window, "错误", info)
-
-def ChangeDialog(dialog: QtWidgets.QProgressDialog, value, downloadBytes, totalBytes):
-    dialog.setValue(value)
-    dialog.setLabelText(f"{downloadBytes}MB/{totalBytes}MB")
-
-def DownloadFinish():
-    ui.centralWidget.setEnabled(True)
-
-class QT:
-    thread = None
-
-def on_addButton_clicked():
-    choose = ui.internetWineList.currentIndex().row()
-    if choose < 0:
-        QtWidgets.QMessageBox.information(window, "提示", "您未选中任何项,无法继续")
-        return
-    downloadName = internetJsonList[choose][1]
-    ReadLocalInformation()
-    for i in localJsonList:
-        if i == internetJsonList[choose][0]:
-            QtWidgets.QMessageBox.information(window, "提示", "您已经安装了这个Wine了!无需重复安装!")
-            return
-    if(ui.deleteZip.isChecked() + ui.unzip.isChecked() == 2):
-        ui.deleteZip.setChecked(False)
-        ui.unzip.setChecked(False)
-    #downloadUrl = internetWineSource + downloadName
-    if "://" in downloadName:
-        downloadUrl = downloadName
-    else:
-        downloadUrl = internetWineSource + downloadName
-    dialog = QtWidgets.QProgressDialog()
-    cancel = QtWidgets.QPushButton("取消")
-    cancel.setDisabled(True)
-    dialog.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg"))
-    dialog.setCancelButton(cancel)
-    dialog.setWindowTitle(f"正在下载“{internetJsonList[choose][0]}”")
-    QT.thread = DownloadThread(
-        dialog, 
-        downloadUrl, 
-        "", 
-        internetJsonList[choose][1],
-        ui.localWineList,
-        ui.deleteZip.isChecked(),
-        not ui.unzip.isChecked(),
-        localJsonList
-        )
-    QT.thread.MessageBoxInfo.connect(MessageBoxInfo)
-    QT.thread.MessageBoxError.connect(MessageBoxError)
-    QT.thread.ChangeDialog.connect(ChangeDialog)
-    QT.thread.Finish.connect(DownloadFinish)
-    ui.centralWidget.setDisabled(True)
-    QT.thread.start()
-
-def on_delButton_clicked():
-    if QtWidgets.QMessageBox.question(window, "提示", "你确定要删除吗?") == QtWidgets.QMessageBox.No:
-        return
-    if ui.localWineList.currentIndex().row() < 0:
-        QtWidgets.QMessageBox.information(window, "提示", "您未选择任何项")
-        return
-    try:
-        name = f"{programPath}/{localJsonList[ui.localWineList.currentIndex().row()]}"
-        dir = QtCore.QDir(name)
-        dir.removeRecursively()
-        QtCore.QFile.remove(name + ".7z")
-        del localJsonList[ui.localWineList.currentIndex().row()]
-        file = open(f"{programPath}/winelist.json", "w")
-        file.write(json.dumps(localJsonList))
-        file.close()
-        ReadLocalInformation()
-        QtWidgets.QMessageBox.information(window, "提示", "删除成功!")
-    except:
-        traceback.print_exc()
-        QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
-
-# 获取当前语言
-def get_now_lang()->"获取当前语言":
-    return os.getenv('LANG')
-
-if __name__ == "__main__":
-    localJsonList = []
-    internetJsonList = []
-    internetWineSourceList = [
-        "https://code.gitlink.org.cn/gfdgd_xi/wine-mirrors/raw/branch/master/",
-        "https://kgithub.com/gfdgd-xi/wine-mirrors-websize/raw/master/",
-        "http://wine.wine-runner.gfdgdxi.top/",
-        "https://github.com/gfdgd-xi/wine-mirrors-websize/raw/master/",
-        "http://127.0.0.1/wine-mirrors/"  # 本地测试源
-        ]
-    internetWineSource = internetWineSourceList[0]
-    app = QtWidgets.QApplication(sys.argv)
-    # 读取翻译
-    if not get_now_lang() == "zh_CN.UTF-8":
-        trans = QtCore.QTranslator()
-        trans.load(f"{programPath}/../LANG/installwine-en_US.qm")
-        app.installTranslator(trans)
-    # 窗口构建
-    window = QtWidgets.QMainWindow()
-    ui = Ui_MainWindow()
-    window.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg"))
-    ui.setupUi(window)
-    window.show()
-    # 连接信号
-    ui.addButton.clicked.connect(on_addButton_clicked)
-    ui.delButton.clicked.connect(on_delButton_clicked)
-    ui.addOtherWine.clicked.connect(InstallOtherWine)
-    ui.changeSourcesGroup.triggered.connect(ChangeSources)
-    ## 加载内容
-    # 设置列表双击不会编辑
-    ui.localWineList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
-    ui.internetWineList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
-    # 读取信息
-    ReadLocalInformation()
-    ReadInternetInformation()
-    # 图标
-    ui.centralWidget.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg"))
-
-    app.exec_()
\ No newline at end of file
diff --git a/deb/opt/apps/deepin-wine-runner/wrestool b/deb/opt/apps/deepin-wine-runner/wrestool
deleted file mode 100755
index 9838510..0000000
Binary files a/deb/opt/apps/deepin-wine-runner/wrestool and /dev/null differ
diff --git a/deb/opt/apps/deepin-wine-runner/窗体透明度设置工具.exe b/deb/opt/apps/deepin-wine-runner/窗体透明度设置工具.exe
deleted file mode 100755
index b5c4756..0000000
Binary files a/deb/opt/apps/deepin-wine-runner/窗体透明度设置工具.exe and /dev/null differ
diff --git a/package-script.zip b/package-script.zip
deleted file mode 100644
index 7e0b555..0000000
Binary files a/package-script.zip and /dev/null differ
diff --git a/package-script/information.json b/package-script/information.json
index 612eea6..761e71d 100755
--- a/package-script/information.json
+++ b/package-script/information.json
@@ -1,5 +1,5 @@
 {
-    "Version": "3.2.1",
+    "Version": "3.2.2",
     "Time": "未知",
     "Thank": [
         "感谢 RacoonGX 的付出与贡献",