|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Есть сборка, которую равно могут использовать консольные и оконные приложения. Но поведение кода должно слегка меняться в зависимости от режима - консольный или оконный процесс. Как определить режим наиболее эффективно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 17:43 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
(цитата, потому что из закрытого раздела) Сон Веры ПавловныЕсли же нужно программно, то встроенными средствами - никак, т.к. для CLR нет разницы, консольное приложение, или оконное. Тут нужно читать PE-хидер исполняемого файла. Начать можно отсюда: https://support.microsoft.com/en-us/kb/90493/en-us + https://msdn.microsoft.com/en-us/magazine/bb985997.aspx В переводе на C# это может выглядеть примерно так (отправная точка: http://code.cheesydesign.com/?p=572): Код: c# 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. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 18:09 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Упс. Ссылка на cheesydesign.com уже не работает. Вот этот PeHeaderReader: PeHeaderReader.cs Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 18:11 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ziktuwЕсть сборка, которую равно могут использовать консольные и оконные приложения. Но поведение кода должно слегка меняться в зависимости от режима - консольный или оконный процесс. Как определить режим наиболее эффективно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
говно код, за то работате :) если из консольного проекта вызывать, вернёт True, если из WF то False ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 18:12 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Roman Mejtesговно код, за то работате :) если из консольного проекта вызывать, вернёт True, если из WF то False Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 18:18 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Всем спасибо! Помогли. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2017, 20:10 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, я сразу сказал, что это говнокод :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 12:34 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Пускай пользователи в журнале расписываются, как они запустили ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 13:45 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Cat2Пускай пользователи в журнале расписываются, как они запустилиВ системном )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 14:21 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
const int IMAGE_SUBSYSTEM_OS2_CUI = 5; // image runs in the OS/2 character subsystem. можно запустить os/2 приложения в винде? это еще поддерживается? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 14:23 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Roman Mejtesconst int IMAGE_SUBSYSTEM_OS2_CUI = 5; // image runs in the OS/2 character subsystem. можно запустить os/2 приложения в винде? это еще поддерживается? Сон Веры Павловны Код: c# 1.
Вопрос к авторам. В хидерах SDK это все еще наличествует. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 21:18 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
вообще имхо, но такие вещи больше похожи на слабую архитектуру. Какой смысл в этом реально на столько полезный, чтоб лепить такое, а потом страдать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 22:14 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Roman Mejtesвообще имхо, но такие вещи больше похожи на слабую архитектуру. Какой смысл в этом реально на столько полезный, чтоб лепить такое, а потом страдать? Ну представьте себе, что вы делаете SDK, который будет использоваться в разных как в виндовых, так и в консольных приложениях. И при этом ваш SDK должен в определенных обстоятельствах выводить сообщения - в виндовом приложении в виде мессадж-бокса, а в консольном - строку в консоли. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 22:21 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ziktuwRoman Mejtesвообще имхо, но такие вещи больше похожи на слабую архитектуру. Какой смысл в этом реально на столько полезный, чтоб лепить такое, а потом страдать? Ну представьте себе, что вы делаете SDK, который будет использоваться в разных как в виндовых, так и в консольных приложениях. И при этом ваш SDK должен в определенных обстоятельствах выводить сообщения - в виндовом приложении в виде мессадж-бокса, а в консольном - строку в консоли.за вывод сообщений нужно яйца оторвать, а логгеры с нормальным интерфейсом никто не отменял ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 23:08 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Сервис - это оконное или консольное Приложение? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2017, 23:23 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Roman Mejtesconst int IMAGE_SUBSYSTEM_OS2_CUI = 5; // image runs in the OS/2 character subsystem. можно запустить os/2 приложения в винде? это еще поддерживается? Чего придираешься? Из того что что-то есть в h.-хидерах еще не следует что это будет использоваться в коде. Просто кому-то нравится переписывать/декларировать в своем модуле все константы/функции которые там есть. Я например не сторонник подобных простыней и декларирую и выписываю только те костанты/ф-ции которые мне нужны для моего кода. Чем хороши WIN API, всегда есть уверенность, что если используешь какую-то ф-цию, то оно будет работать и в будующих версиях виндов, чтоб они там не писали про Depricated. Прикинь ты код 20 лет назад написал (пусть даже ты его дорабатывал под новые OS), но у тебя там эта константа затесалась, а они возьмут ее и выкинут из очередного SDK/DDK. Вот по этому и не выкидывают, "обратная совместимость" так сказать. Try..catch -это да просто, но если очень этим злоупотреблять (когда их много), то говнокод еще и тормозить будет нехило, а API-простыни как бы мгновенно отрабатывают. ИзопропилСервис - это оконное или консольное Приложение? А не пофиг? Я например часто делаю сервис как "оконное" приложение, на всяк. случай форму "скрываю", хотя ее все одно не видно, если под System. Мне к примеру удобно удерживать приложение через Application.Run(Form1), инициализировать в Form1_Load, делать какие-то заключительные процедуры в Form1_FormClosed, до кучи еще какими-нибудь таймерами кинутыми на эту форму воспользоваться и т.п. Хорошо это или плохо - мне так удобно, я так привык, кто в VB6 работал тот поймет. Хотя вот выводить MsgBox-ы при такой "архитектуре" ясно дело не приемлимо, ибо юзеру их "не видно". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 00:42 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ИзопропилСервис - это оконное или консольное Приложение? Оконное: Код: sql 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 02:31 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ziktuwRoman Mejtesвообще имхо, но такие вещи больше похожи на слабую архитектуру. Какой смысл в этом реально на столько полезный, чтоб лепить такое, а потом страдать? Ну представьте себе, что вы делаете SDK, который будет использоваться в разных как в виндовых, так и в консольных приложениях. И при этом ваш SDK должен в определенных обстоятельствах выводить сообщения - в виндовом приложении в виде мессадж-бокса, а в консольном - строку в консоли. Представьте себе есть у меня такой SDK, используется и в виндовых, и в консольных, и в веб приложениях. И сообщения в последних прекрасно выводятся без какого-либо определения режима. Рассказать как? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 06:41 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ИзопропилСервис - это оконное или консольное Приложение? Веб :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 06:42 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Дмитрий77Чего придираешься?В каком месте я придираюсь к объявлению? если константа определена как private или protected на крайняк, я не против, только за ) мне вообще в целом интересно, возможно ли запустить приложение os/2 на совр. виндовс ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 13:28 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Roman Mejtes, В приведенном коде (насколько я глянул) реально используется только 2 константы из списка. IMAGE_SUBSYSTEM_WINDOWS_CUI IMAGE_SUBSYSTEM_WINDOWS_GUI Автор же как человек аккуратный задекларировал весь список (хотя спрашивается нафига выписывать то, что никогда не понадобится). Но такова была обычная практика в том же самом VB6. На самом деле это еще и лишнее, потому как все эти ненужные декларации "компилируются", вот здесь озадачивался этим вопросом. Как при компиляции "удалить из exe-шника" декларированные, но не используемые API? Оно как бы не жалко, но может например увеличить число претензий со стороны антивирусных поделок. Ну а твой интерес, какое отношение к вопросу имеет. Я лично про OS/2 особо никогда не интересовался, первые компы были с Win95/98 и так понимаю на тот момент OS/2 уж ушла в сторону и была не шибко актуальна. Но судя по википедии https://ru.wikipedia.org/wiki/OS/2 Win отделился от OS/2, отсюда понятно происхождение констант в SDK, не более. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 15:34 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
skyANAРассказать как? :) Расскажи. У меня есть нечто подобное и мне интересно как другие решают. У меня чисто классы, которые считают и вызовы этих классов в разных приложениях. Классы входят в приложения через "Добавить как связь" Можно было бы и в DLL запихать, но у меня ограничение - программы должны состоять из одного файла ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 19:24 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Перепробовав разные варианты, надежно сработал такой вариант (и под дебагером, и без): Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2017, 19:29 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
Если я вызову AllocConsole в оконном приложении этот говнокод решит что моё приложение консольное? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2017, 00:06 |
|
C# Как определить в коде, в консольном режиме работает приложение или в оконном?
|
|||
---|---|---|---|
#18+
ИзопропилЕсли я вызову AllocConsole в оконном приложении этот говнокод решит что моё приложение консольное? ИМХО правильно решит. Есть консоль - есть куда выводить. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2017, 10:49 |
|
|
start [/forum/topic.php?fid=20&fpage=45&tid=1399927]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 187ms |
0 / 0 |